2011-11-28 96 views
3

好吧,我知道這個問題已經被問過:Previous Question複製二維數組使用.clone()仍引用原始數據

我也看着其他線程數和網站,他們似乎都創造更多問題比答案。

Josh Bloch on Design - 文章討論.clone();

但我仍然不能工作了回答我的問題。

當我克隆我的二維數組:

values = Map.mapValues.clone(); 

我仍然無法安全地修改的values的內容,因爲它仍然會修改Map.mapValues內容。

實際上是否有一種方法可以複製比我更有效的數組,每次只需從頭開始重新創建一個數組?

由於

回答

7

在Java中,一個二維數組是一維數組的引用的數組。 Map.mapValues.clone()僅克隆第一層(即參考),因此您最終得到了與相同的基準1D陣列的新參考陣列。這就是爲什麼您嘗試使用clone()不起作用。解決這個問題

一種方式是通過克隆也是潛在的一維數組:

byte[][] values = Map.mapValues.clone(); 
for (int i = 0; i < values.length; i++) { 
    values[i] = values[i].clone(); 
} 
+0

謝謝,這個解決我的問題,是有不同的方法,我可以調用不涉及使用for(; ;)循環? – Troyseph

+0

@SebastianTroy:我不知道標準庫中的任何功能都可以做到這一點。我個人會將這四行代碼轉換爲一個可以根據需要調用的幫助函數。 – NPE

+0

@ aix非常感謝你的幫助:D – Troyseph