1.这里放入list里的是不同的map,虽然map d是同一个map,但是指向了不同的地址(猜测)
public static void main(String argv[]) {
List<Map> aList = new ArrayList<>();
Map a = new HashMap<>();
Map b = new HashMap<>();
Map c = new HashMap<>();
a.put("a", 1);
b.put("a", 2);
c.put("a", 3);
aList.add(a);
aList.add(b);
aList.add(c);
System.out.println(aList);
List<Map> bList = new ArrayList<>();
Map d = new HashMap<>();
for (int i = 0; i <= 2; i++) {
d = aList.get(i);
d.put("b", i);
bList.add(d);
}
System.out.println(bList);
}
[{a=1}, {a=2}, {a=3}]
[{a=1, b=0}, {a=2, b=1}, {a=3, b=2}]
2.由于用的是同一个amap,所以导致list数据全被覆盖
public static void main(String argv[]) {
Map<String,Object> amap = new HashMap<>();
List<Map<String,Object>> alist = new ArrayList<>();
for(int i=0;i<3;i++){
// amap=new HashMap<>();
amap.put("a", i);
amap.put("b", i);
alist.add(amap);
}
System.out.println(alist);
Map bmap = new HashMap<>();
for(int i = 0;i<alist.size();i++){
bmap = alist.get(i);
bmap.put("hehe",i);
}
System.out.println(alist);
}
[{a=2, b=2}, {a=2, b=2}, {a=2, b=2}]
[{hehe=2, a=2, b=2}, {hehe=2, a=2, b=2}, {hehe=2, a=2, b=2}]
3.这里第二个for循环最容易造成迷惑,明明每次for循环都是新建了一次bmap,然后数据还是被覆盖掉,因为amap的地址是唯一的(猜测)
public static void main(String argv[]) {
Map<String,Object> amap = new HashMap<>();
List<Map<String,Object>> alist = new ArrayList<>();
for(int i=0;i<3;i++){
//amap=new HashMap<>();
amap.put("a", i);
amap.put("b", i);
alist.add(amap);
}
System.out.println(alist);
for(int i = 0;i<alist.size();i++){
Map bmap = new HashMap<>();
bmap = alist.get(i);
bmap.put("hehe",i);
}
System.out.println(alist);
}
[{a=2, b=2}, {a=2, b=2}, {a=2, b=2}]
[{a=2, b=2, hehe=2}, {a=2, b=2, hehe=2}, {a=2, b=2, hehe=2}]
4在第一次for循环中每次都new一个Map,则不会被覆盖
public static void main(String argv[]) {
Map<String,Object> amap = new HashMap<>();
List<Map<String,Object>> alist = new ArrayList<>();
for(int i=0;i<3;i++){
amap=new HashMap<>();
amap.put("a", i);
amap.put("b", i);
alist.add(amap);
}
System.out.println(alist);
for(int i = 0;i<alist.size();i++){
Map bmap = new HashMap<>();
bmap = alist.get(i);
bmap.put("hehe",i);
}
System.out.println(alist);
}
[{a=0, b=0}, {a=1, b=1}, {a=2, b=2}]
[{a=0, b=0, hehe=0}, {a=1, b=1, hehe=1}, {a=2, b=2, hehe=2}]