2009-06-15 26 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; 
}