是否有java实用程序为clone()
执行HashMap
方法,使得它不仅复制地图元素而不是地图对象(作为clone()
类中的HashMap
)?
答案 0 :(得分:12)
元素中提到的其他对象怎么样?你想要克隆有多深?
如果您的地图元素没有任何深层引用和/或所有内容都是Serializable
,您可以通过ObjectOutputStream
将地图序列化为ByteArrayOutputStream
,然后立即反序列化。
唯一的另一种选择是手动完成。
答案 1 :(得分:1)
一旦您知道您的键/值对元素是可克隆的:
HashMap<Foo, Bar> map1 = populateHashmap();
HashMap<Foo, Bar> map2 = new HashMap<Foo, Bar>();
Set<Entry<Foo, Bar>> set1 = map1.entrySet();
for (Entry<Foo, Bar> e : l)
map2.put(e.getKey().clone(), e.getValue().clone());
答案 2 :(得分:1)
SO问题深度克隆实用程序建议与此类似,并且an answer that may be helpful to you。
总结一下,他们建议您使用Google代码中的the Cloning library。从个人经验来看,它深刻地复制了HashMap
。它甚至可以克隆非Cloneable
的内容。
答案 3 :(得分:0)
查看http://www.devdaily.com/java/jwarehouse/netbeans-src/db/libsrc/org/netbeans/lib/ddl/impl/SpecificationFactory.java.shtml处的deepClone方法。它不是通用的,但它包含几个内置类型(包括HashMap本身,递归),显然可以扩展。
答案 4 :(得分:0)
通常副本应该很深。以下是如何深度复制&#34;
的示例Map<Integer, ArrayList<Integer>>
代码:
public static Map<Integer, ArrayList<Integer>> deepCopyMapIntList
(Map<Integer, ArrayList<Integer>> original) {
Map<Integer, ArrayList<Integer>> copy = new HashMap<>(original.size());
for (int i : original.keySet()) {
ArrayList<Integer> list = original.get(i);
copy.put(i, (ArrayList<Integer>) list.clone());
}
return copy;
}