我需要复制 HashMap<Integer, List<MySpecialClass> >
但是当我更改副本中的某些内容时,我希望原件保持不变。即,当我从副本中删除 List<MySpecialClass>
中的某些内容时,它保留在原件中的 List<MySpecialClass>
中。
如果我理解正确,这两种方法只创建浅拷贝,这不是我想要的:
mapCopy = new HashMap<>(originalMap);
mapCopy = (HashMap) originalMap.clone();
我对吗?
有没有比遍历所有键和所有列表项并手动复制更好的方法呢?
原文由 Mathis 发布,翻译遵循 CC BY-SA 4.0 许可协议
你是对的,浅拷贝不能满足你的要求。它将包含原始地图中的
List
s 的副本,但是那些List
s 将引用相同的List
List
对象,以便对对象进行修改---
来自一个HashMap
将出现在相应的List
来自另一个HashMap
在 Java 中没有为
HashMap
提供深度复制,因此您仍然必须遍历所有条目和put
它们在新的HashMap
但是您还应该每次都制作一份List
的副本。是这样的:如果你想修改你的个人
MySpecialClass
对象,并且更改不反映在你复制的List
sHashMap
那么你需要制作—它们的新副本也是如此。