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);
}
------解决思路----------------------
每个对象在堆中的地址都是唯一的,对象的访问只能通过栈中的引用来操作