java中的HashMap克隆实用程序

时间:2009-06-15 21:02:19

标签: java

是否有java实用程序为clone()执行HashMap方法,使得它不仅复制地图元素而不是地图对象(作为clone()类中的HashMap )?

5 个答案:

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