A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© oracleserver 初级黑马   /  2012-6-25 15:01  /  2128 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

List l= new ArrayList();
Map   m=new HashMap();
map.put("a","1");
map.put("b","2");
map.put("c","3");
map.put("d","4");
l.add(m);
Map m2= new HashMap();
m2= l.get(0); //报错,Type mismatch: cannot convert from Object to Map

问题如上,我究竟如何才能把一个map写进去,然后取出来呢?
我试过 (Map)atxt.get(0);这样强转的,
List<Map> atxt = new ArrayList<Map>();也试过;
但是这样是编译不过的...

8 个回复

倒序浏览
本帖最后由 黄连兵 于 2012-6-25 16:07 编辑

List l= new ArrayList();
Map   m=new HashMap();
m.put("a","1");
m.put("b","2");
m.put("c","3");
m.put("d","4");
l.add(m);
Map m2= new HashMap();
m2= (Map)l.get(0);//在这里声明下要以Map的方式取出l中的第一个元素。否则默认的取出来就是个object。
楼主的代码中mapm是肿么回事?
楼主这个例子List和Map混用倒是蛮有意思哈~
其实应该用泛型定义,限定List l中的元素类型:List <Map>l= new ArrayList<Map>();后面就不用强制转换了。
回复 使用道具 举报
List l= new ArrayList();
Map   m=new HashMap();
map.put("a","1");
map.put("b","2");
map.put("c","3");
map.put("d","4");
l.add(m);
Map m2= new HashMap();
m2= l.get(0); //改为m2 = (Map).l.get(0);声明Map的方式取出第一个元素,否则默认取出来的是一个Object。
回复 使用道具 举报
本帖最后由 周兴中 于 2012-6-25 16:28 编辑

List l= new ArrayList();//建议使用ArrayList l= new ArrayList();  否则也会出现类型不匹配:Type mismatch: cannot convert from ArrayList to List
Map   m=new HashMap();// 楼主命名前后不一致,不知道你怎么put
map.put("a","1");   
map.put("b","2");
map.put("c","3");
map.put("d","4");
l.add(m);  // put的是map , add的却是 m ,我想你的原意应该是 add(map)吧,楼主以后编程的时候还是要细心点,不然会很受伤.
Map m2= new HashMap();
m2= l.get(0); //报错,类型不匹配,需要强制转换 ,m2= (Map) l.get(0);



可以这么改:
ArrayList l= new ArrayList();
                Map   map=new HashMap();
                map.put("a","1");
                map.put("b","2");
                map.put("c","3");
                map.put("d","4");
                l.add(map);
                //System.out.println(l);
                Map m2= new HashMap();
                m2= (Map) l.get(0);
                //System.out.println(m2);
回复 使用道具 举报
缺少强转……
回复 使用道具 举报
Map map=new HashMap();

Map的使用:

注意Map里的对象是键值对:{key,value}  eg.{"username","godelegant"}
取出有多种方法,比较常用的有
1、在知道Key的情况下,直接map.get(key);  eg. map.get("username");
2、在不知道key的情况下,使用iterator(迭代器)来得到,注意下面的代码:

Map   map=new HashMap();
map.put("a","1");
map.put("b","2");
map.put("c","3");
map.put("d","4");

Set keySet = map.keySet(); // 得到key的set
Iterator iter = keySet.iterator();
while(iter.hasNext()){
  String key = (String)iter.next();
  String value = map.get(key);
  System.out.println(key+":"+value);
}
}

上面的问题:
Map map2 = new HashMap();
map2 = atxt.get(0); //报错,Type mismatch: cannot convert from Object to Map

这是因为:不知道你的list里面装的是什么类型,你取出来的时候,你也没告诉他是什么类型,直接给了Map类型的变量才出错。

这样写:
Map map2 = (Map)atxt.get(0);

或者:
List<Map> atxt = new ArrayList<Map>();
...
Map map2 = atxt.get(0);
回复 使用道具 举报
李伟 中级黑马 2012-6-25 17:38:28
7#
可以改成:
import java.util.*;
class  ArrayMap
{
        public static void main(String[] args)
        {
                List l= new ArrayList();
                Map  m=new HashMap();
                m.put("a","1");
                m.put("b","2");
                m.put("c","3");
                m.put("d","4");
                l.addAll(0,m.entrySet());//必须先把m转换成集合才能添加到l里
                Map m2= new HashMap();
                m2.putAll(m);
                System.out.println(l);
                System.out.println(m2);
                System.out.println(l.get(0));
        }
}
回复 使用道具 举报
李伟 中级黑马 2012-6-25 17:39:45
8#
必须先把m转换成Set集合才能添加到l里
回复 使用道具 举报
李伟 中级黑马 2012-6-25 17:40:48
9#
可以改成:
import java.util.*;
class  ArrayMap
{
        public static void main(String[] args)
        {
                List l= new ArrayList();
                Map  m=new HashMap();
                m.put("a","1");
                m.put("b","2");
                m.put("c","3");
                m.put("d","4");
                l.addAll(0,m.entrySet());//必须先把m转换成Set集合才能添加到l里
           Map m2= new HashMap();
                m2.putAll(m);
                System.out.println(l);
                System.out.println(m2);
                System.out.println(l.get(0));
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马