你是对的,浅层副本不符合你的要求。它将具有来自原始映射的s的副本,但这些副本将引用相同的对象,因此对一个的修改将出现在来自另一个的相应中。List
List
List
List
HashMap
List
HashMap
在 Java 中没有为 提供深度复制,因此您仍然必须遍历新 .但是您还应该每次都制作一份副本。像这样:HashMap
put
HashMap
List
public static HashMap<Integer, List<MySpecialClass>> copy(
HashMap<Integer, List<MySpecialClass>> original)
{
HashMap<Integer, List<MySpecialClass>> copy = new HashMap<Integer, List<MySpecialClass>>();
for (Map.Entry<Integer, List<MySpecialClass>> entry : original.entrySet())
{
copy.put(entry.getKey(),
// Or whatever List implementation you'd like here.
new ArrayList<MySpecialClass>(entry.getValue()));
}
return copy;
}
如果要修改单个对象,并且更改不会反映在复制的 s 中,则还需要制作它们的新副本。MySpecialClass
List
HashMap