为了制作包含值副本而不是引用的数组的副本,我执行以下操作:
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;
在ORIGINAL(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()。
答案 0 :(得分: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;
}