2017-04-11 40 views
0

我有一些代碼創建了一個哈希映射的ArrayList,然後我需要該哈希映射的ArrayList副本進行計算,但我希望原來保持不變。創建一個哈希映射ArrayList的副本

我已經試過各種,從人們的SO答案,這裏是我當前的代碼:

List<Map> counts = new ArrayList<>(); 

counts名單充滿了包含HashMap。

我需要一份副本,但我不希望我在副本上執行的計算會影響原件。

我曾嘗試:

List<Map> copyCounts = new ArrayList<Map>(counts); 

但每當我進行修改它改變了原來的

+1

[複製它(http://stackoverflow.com/questions/4592478/clone-arraylist-clone-i-thought-does-a-淺拷貝) – Alfabravo

+1

千萬不要使用克隆。它壞了。 – satnam

+0

不要以爲你可以克隆Maps呢? – user3667111

回答

1

這裏是如何創建一個深度複製:

List<Map> counts = ... 

List<Map> copy = new ArrayList<>(); 
for(Map m : counts){ 
    copy.add(new HashMap(m)); 
} 
+0

工作完美,謝謝先生。 – user3667111

+0

爲了將來的參考,請使用泛型! –

+0

你會如何使用這個@JacobG的泛型。 – user3667111

1

這是因爲所有的地圖你被引用添加到您的新的數組列表仍在。您還需要複製個別地圖。