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