2015-11-07 65 views
0

在我的項目中,我操縱由對象組成的多維數組。操作後,我想「重置」數組。我從這裏和全網測試了幾十個「深度複製」代碼,但似乎沒有人使用多維數組。我在Java 7上。你能提供一個提示嗎?深度複製2維對象陣列

通過重置我的意思是在操作之前的初始狀態。所以我想創建我的陣列的備份並稍後恢復。

+1

除非您定義「重置」,否則無法回答您的問題。 – wero

+0

在操作之前休息到初始狀態。所以我想創建我的陣列的備份並稍後恢復 – laufi

+0

歡迎使用Stack Overflow。我已將您的評論合併到您的問題中。請在下次改進時編輯您的問題。有時候最好清楚一點,你已經編輯了它。 –

回答

0

我相信這應該完成有問題的陣列的深層複製。

private static class CloneableObject 
     implements 
      Cloneable { 

    @Override 
    public CloneableObject clone() { 
     return new CloneableObject(); 
    } 
} 


CloneableObject[][] original; 


void someMethod() { 
    CloneableObject[][] copy = Arrays.copyOf(this.original, this.original.length); 
    for (int i = 0; i < copy.length; i++) { 
     copy[i] = Arrays.copyOf(copy[i], copy[i].length); 
     for (int j = 0; j < copy[i].length; j++) { 
      copy[i][j] = copy[i][j].clone(); 
     } 
    } 

    /* 
    * Manipulation of this.original is to be done here 
    * None of the manipulations will be reflected in copy 
    * 
    * Note that (this.original[n][m] == copy[n][m]) will evaluate to false, 
    * where n and m are arbitrary indices of the array. 
    */ 

    this.original = copy; // "reset" 
} 

如果希望Object的實例不被複制,只需刪除內部循環即可。

+0

代碼中「Arrays」的含義是什麼?我的IDE說它沒有被定義,並且沒有提供要導入的軟件包 – laufi

+0

我自己認爲java.util.Arrays是有意義的,但現在它說預期了一個表達式在數組 laufi

+0

事實上它的意思是java.util.Arrays中。它寫的地方'',它不應該是。內部循環中也存在一些問題,我將修改並編輯答案。 –