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; }