如何在Java中复制HashMap(不是浅表复制)
我需要制作一个副本,`HashMap<Integer, List
但是当我更改副本中的某些内容时,我希望原件保持原样。也就是说,当我
List从副本中删除某项内容时,它会保留在
List`原件中。
如果我正确理解,这两种方法只会创建浅拷贝,这不是我想要的:
mapCopy = new HashMap<>(originalMap);mapCopy = (HashMap) originalMap.clone();
我对吗?
除了遍历所有键和所有列表项并手动复制之外,还有更好的方法吗?
回答:
没错,浅表副本不能满足您的要求。它将具有List
原始地图中的副本,但这些副本List
将引用相同的List
对象,因此对List
from
的修改HashMap
将出现在List
from的对应内容中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