2012-09-11 91 views
4

如果我有一個Java地圖與它價值觀的100S,我想利用這個代碼來創建它的另一個副本:使用按值傳遞創建地圖副本的最佳方法是什麼?

LinkedHashMap<String, Vector<String>> map1 = new LinkedHashMap<String, Vector<String>>(); 
LinkedHashMap<String, Vector<String>> map2 = new LinkedHashMap<String, Vector<String>>(map1); 

然後,如果我在任何向量入口更改任何價值MAP1這將是也受到map2的影響。我不要那個。我希望map2在map1上完全獨立。

這樣做的最好方法是什麼?

回答

9

基本上,你需要克隆每個向量:

LinkedHashMap<String, Vector<String>> map2 = new LinkedHashMap<String, Vector<String>>(); 
for (Map.Entry<String, Vector<String>> entry : map1.entrySet()) { 
    Vector<String> clone = new Vector<String>(entry.getValue()); 
    map2.put(entry.getKey(), clone); 
} 

你不必去比這更深雖然,當然 - 因爲String是不可改變的。

+0

我使用的是矢量只是一個例子:)(你使用Vector而非ArrayList,順便說一下?任何原因)...我使用ArrayList的,當然真正的代碼。 – Brad

+2

我想你的意思是「map1.entrySet()」在第2行,循環條目。 – Brad

+0

@Brad:是的,我改用了'entryset()'。爲什麼你要舉一個例子把Java2之前的集合與Java2 +集合混合在一起,如果你的真實代碼中沒有這樣奇怪的混合呢? –

相關問題