我有一个Map对象,每次更新地图时,其值都会不断变化。它们的键始终相同,但值会发生变化。每次我更改Map对象时,我都会将它添加到ArrayList中。我可以看到每次将新映射添加到ArrayList时映射中的值都不同,但是当ArrayList完成更新并准备好读取时,其中的所有Map都是相同的。
任何人都可以想到为什么会这样吗?
这基本上就是发生的一切......使用新的Map调用UpdateLog约20次,每个dataMap1对象都不同。它被添加到ArrayList中。当我调试时,我可以看到每次dataMap1值都不同。但是当它完成时,mapLog中的每个dataMap1对象都是相同的!!
public void UpdateLog(final Map<String,String> dataMap1)
{
mapLog.add(dataMap1);
}
答案 0 :(得分:5)
你声明每个dataMap1对象都不同......但不要忘记dataMap1
的值只是一个引用,而不是一个对象。如果你这样做:
Map<String, String> map = new HashMap<String, String>();
map.put("a", "b");
UpdateLog(map);
map.clear();
map.put("x", "y");
UpdateLog(map);
然后实际使用两个不同的对象。确保每次都有一个不同的对象:
// Replaces the call to map.clear()
map = new HashMap<String, String>();
map.put("x", "y");
UpdateLog(map);
如果这没有帮助,请发布更多代码。鉴于你的描述,这就是正在发生的事情。当然,您可能希望复制您的地图,而不是每次创建新地图。