当前位置: 代码迷 >> J2SE >> list中存放地图的有关问题
  详细解决方案

list中存放地图的有关问题

热度:166   发布时间:2016-04-23 20:14:28.0
list中存放map的问题

                List<Map<String,String>> list = new ArrayList<Map<String,String>>();
Map<String,String> m =new HashMap<String,String>();
for(int i =0;i<2;i++){
  m.put("key1", String.valueOf(i));   
  list.add(m);   
}


这样list存储的是[{key1=1}, {key1=1}]不是希望的结果[{key1=0}, {key1=1}],解决的办法就是在循环体内每次重新new一个map.

List中是存放的是指向对象map的引用?
------解决思路----------------------
是的 list中存放的都是指向同一个map

就想你说的必须在循环内new一个新的map再add
------解决思路----------------------
你往list里面放的都是同一个map,key都是“key1”,第一个0被后面的1覆盖掉了
------解决思路----------------------
1、list中存放的是map的引用
2、第一次添加map的值为("key1","0"),第二次添加("key1","1"),由于key相同覆盖了"0"为"1",所以map最后的值为("key1","1"),list最后为[("key1","1"),("key1","1")]
------解决思路----------------------
您好:
  您纠结的问题是为何list里是[{key1=1}, {key1=1}]
  首先,Map接口里的key值是不允许重复的;其次,list中允许对象重复。再次,for循环了2次
下边把for循环拆分开来详细看。
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
    Map<String,String> m =new HashMap<String,String>();m.put("k",String.valueOf(0));
    list.add(m);
    System.out.println(list.toString()+"-----"+list.size()); 
    System.out.println( m.get("k")); 
    /////============================================
    m.put("k",String.valueOf(1));
        list.add(m);
        System.out.println(list.toString()+"-----"+list.size());  
    System.out.println( m.get("k")); 

   结果
[{k=0}]-----1
0
[{k=1}, {k=1}]-----2
1

------解决思路----------------------
Java的引用型变量实质是一个指针(官方的资料上叫“引用”,但总觉得太拗口)。

LZ实质上是在List里添加了两个引用型变量(指针),它们指向的是同一个实例。
------解决思路----------------------
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
Map<String,String> m;
for(int i =0;i<2;i++){
   m =new HashMap<String,String>();
   m.put("key1", String.valueOf(i));          
   list.add(m);   
}

------解决思路----------------------

List<Map<String,String>> list = new ArrayList<Map<String,String>>();
for(int i =0;i<2;i++){
   Map<String,String> m =new HashMap<String,String>();
   m.put("key1", String.valueOf(i));          
   list.add(m);   
}

------解决思路----------------------
每个对象在堆中的地址都是唯一的,对象的访问只能通过栈中的引用来操作
  相关解决方案