循环遍历一个Map,然后取出key和value组成新Map,加入list,然后发现list里的值都一样
map.put("张三", 7);
map.put("李四", 1);
map.put("王五", 5);
map.put("赵六", 3);
Map<String, Object> mapDriver = new HashMap<>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
String k = entry.getKey();
Object v = entry.getValue();
mapDriver.put("name", k);
mapDriver.put("count", v);
list.add(mapDriver);
}
检查一下发现list里面的Map的哈希值是一样的,说明存进去的是同一个map对象,在堆内存中指向同一个地址,而不是map的具体数据,在遍历的过程中,map的数据一直被更改,因此到最后会导致list中所有的数据都是最后一次map更新的数据。
错误原因: Map定义在循环外,导致每次存进去的是同一个Map对象
改正: 在循环体里实例化Map
map.put("张三", 7);
map.put("李四", 1);
map.put("王五", 5);
map.put("赵六", 3);
for (Map.Entry<String, Object> entry : map.entrySet()) {
Map<String, Object> mapDriver = new HashMap<>();
String k = entry.getKey();
Object v = entry.getValue();
mapDriver.put("name", k);
mapDriver.put("count", v);
list.add(mapDriver);
}