黑马程序员技术交流社区

标题: Map&List [打印本页]

作者: oracleserver    时间: 2012-6-25 15:01
标题: Map&List
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>();也试过;
但是这样是编译不过的...
作者: 黄连兵    时间: 2012-6-25 16:05
本帖最后由 黄连兵 于 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>();后面就不用强制转换了。
作者: 张华廷    时间: 2012-6-25 16:14
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:16
本帖最后由 周兴中 于 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);
作者: Forever。    时间: 2012-6-25 16:48
缺少强转……
作者: sbeeqnui1987    时间: 2012-6-25 17:00
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
可以改成:
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
必须先把m转换成Set集合才能添加到l里

作者: 李伟    时间: 2012-6-25 17:40
可以改成:
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));
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2