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>>(); Map<String,String> m =new HashMap<String,String>(); for(int i =0;i<2;i++){ m.put("key"+i, 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); }
是覆盖了,但是我在覆盖之前已经add到list里了。说明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
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);
}
Map<String,String> m =new HashMap<String,String>();
for(int i =0;i<2;i++){
m.put("key"+i, 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);
}
[{key0=0, key1=1}]
应该按照10楼和12楼的做法得到
[{key1=0}, {key1=1}]
用AbstractMap.SimpleEntry就好了。
List都只存长度为1的map有点浪费,遍历也不方便吧。
Map.Entry<String, String> entry = new AbstractMap.SimpleEntry <String, String>("key1", "value1");