你是对的,浅版不符合你的要求.它将包含原始地图中的列表副本,但这些列表将引用相同的List对象,以便从一个HashMap对List进行的修改将出现在来自其他HashMap的相应List中.
在Java中没有为HashMap提供深度复制,因此您仍然需要遍历所有条目并将它们放入新的HashMap中.但是你也应该每次都复制一份清单.像这样的东西:
public static HashMap> copy(
HashMap> original)
{
HashMap> copy = new HashMap>();
for (Map.Entry> entry : original.entrySet())
{
copy.put(entry.getKey(),
// Or whatever List implementation you'd like here.
new ArrayList(entry.getValue()));
}
return copy;
}
如果要修改单个MySpecialClass对象,并且更改未反映在复制的HashMap的列表中,则还需要创建它们的新副本.