java中的HashMap克隆实用程序

有没有java实用程序为HashMap执行clone()方法,这样它就可以复制map元素而不仅仅是map对象(作为HashMap类中的clone() )?

那些元素中提到的其他对象呢? 你想要克隆有多深?

如果您的地图元素没有任何深层引用和/或所有内容都是Serializable ,您可以通过ObjectOutputStream将地图序列化为ByteArrayOutputStream ,然后立即反序列化。

唯一的另一种选择是手动完成。

SO问题深度克隆实用程序建议与此类似,并且有一个可能对您有所帮助的答案 。

总而言之,他们建议使用Google Code中的克隆库 。 从个人经验来看,它深刻复制了HashMap 。 它甚至可以克隆不可克隆的东西。

一旦知道您的键/值对元素是可克隆的:

 HashMap map1 = populateHashmap(); HashMap map2 = new HashMap(); Set> set1 = map1.entrySet(); for (Entry e : l) map2.put(e.getKey().clone(), e.getValue().clone()); 

在http://www.devdaily.com/java/jwarehouse/netbeans-src/db/libsrc/org/netbeans/lib/ddl/impl/SpecificationFactory.java.shtml上查看deepClone方法。 它不是通用的,但它包含几个内置类型(包括HashMap本身,递归),显然可以扩展。

通常副本应该很深。 这是一个如何“深度复制”的例子

 Map> 

码:

 public static Map> deepCopyMapIntList (Map> original) { Map> copy = new HashMap<>(original.size()); for (int i : original.keySet()) { ArrayList list = original.get(i); copy.put(i, (ArrayList) list.clone()); } return copy; }