2009-06-15 33 views
6

是否有java实用程序可以执行clone()方法HashMap这样它就可以复制地图元素而不仅仅是地图对象(如HashMap类中的clone())?java中的HashMap的克隆实用程序

+0

旁注:如果你的元素是整个对象图不可改变的 - 你不需要克隆它们。 – Fortyrunner 2009-06-15 21:52:09

回答

11

那些元素中引用的其他对象呢?你想要多少克隆?

如果您的地图元素没有任何深刻的引用和/或一切Serializable,您可以通过ObjectOutputStream地图序列化为ByteArrayOutputStream,然后反序列化的时候了。

唯一的另一种选择是手动进行。

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

@Oso:如果e.getKey()或e.getValue()是另一个HashMap()或其他需要深拷贝克隆的对象,会发生什么? – 2009-06-15 21:18:24

0

经常复制应该很深。下面是一个例子如何“深拷贝”

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