如何在Java中复制HashMap(不是浅表复制)

我需要制作一个副本,`HashMap<Integer, List

但是当我更改副本中的某些内容时,我希望原件保持原样。也就是说,当我List从副本中删除某项内容时,它会保留在List`原件中。

如果我正确理解,这两种方法只会创建浅拷贝,这不是我想要的:

mapCopy = new HashMap<>(originalMap);

mapCopy = (HashMap) originalMap.clone();

我对吗?

除了遍历所有键和所有列表项并手动复制之外,还有更好的方法吗?

回答:

没错,浅表副本不能满足您的要求。它将具有List原始地图中的副本,但这些副本List将引用相同的List对象,因此对Listfrom

的修改HashMap将出现在Listfrom的对应内容中HashMap

HashMap在Java中,没有提供深拷贝功能,因此您仍然必须遍历所有条目,put并在new

条目中进行遍历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;

}

如果要修改单个MySpecialClass对象,并且所做的更改未反映在所List复制的对象中HashMap,那么您也需要为其创建新副本。

以上是 如何在Java中复制HashMap(不是浅表复制) 的全部内容, 来源链接: utcz.com/qa/429810.html

回到顶部