Java ArrayList of Map - 所有Map对象都是dupe

时间:2011-03-25 13:59:13

标签: java map arraylist

我有一个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);    

}

1 个答案:

答案 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);

如果这没有帮助,请发布更多代码。鉴于你的描述,这就是正在发生的事情。当然,您可能希望复制您的地图,而不是每次创建新地图。