循环遍历一个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);
}

博客讲述了在Java编程中遇到的问题,即在遍历Map并构造新的Map对象添加到列表时,由于在循环外部初始化Map导致所有列表元素指向同一对象。文章详细分析了错误原因,并提供了修正方案,即在循环内部实例化Map对象,确保每个列表元素包含独立的数据。
1366

被折叠的 条评论
为什么被折叠?



