深拷贝2维对象数组

时间:2015-11-07 19:05:20

标签: java multidimensional-array

在我的项目中,我操作一个由Objects组成的多维数组。操作后我想"重置"数组。我测试了几十个"深拷贝"来自这里和整个网络的代码,但似乎没有人使用多维数组。我是关于Java 7.你能提供一个提示吗?

  

通过重置我的意思是在操作之前的初始状态。所以我想创建我的阵列的备份并在以后恢复它。

1 个答案:

答案 0 :(得分: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的实例,只需删除内部循环。