2015-11-07 68 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中。它写的地方'',它不应该是。内部循环中也存在一些问题,我将修改并编辑答案。 –