2

为了制作包含值副本而不是通过引用的数组的副本,我执行以下操作:

int[][][] copy = {{{0}},{{0}},{{0,0}},{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}},{{0}},{{0,0}}};
System.arraycopy(spelerSpel, 0, copy, 0, spelerSpel.length);

然后在副本中更改一个值:

copy[SPELER_NUMMER][0][0] = baanSpelerNummer;

这导致在原始(spelerSpel)数组中保持相同的更改值,例如:

{{{4}},{{0}},{{0,0}},{{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}},{{0}},{{0,0}}};

作为副本。我也试过 .clone(),同样的结果。我究竟做错了什么?

顺便说一句,我的目标是 Android API 8,它不支持 Arrays.copyOf()。

4

1 回答 1

1

System.arraycopy()不支持深拷贝,但它在简单数组的性能方面做得很好。

您可以将它与一些额外的循环一起使用来创建自己的多维arraycopy3d()

public int[][][] arraycopy3d(int[][][] array) {

     int[][][] copy = new int[array.length][][];

     for (int i = 0; i < array.length; i++) {
         copy[i] = new int[array[i].length][];
         for (int j = 0; j < array[i].length; j++) {
             copy[i][j] = new int[array[i][j].length];
             System.arraycopy(array[i][j], 0, copy[i][j], 0, array[i][j].length);
        }
    }

    return copy;
} 
于 2013-02-04T21:34:47.170 回答