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;

その時点で、同じ変更された値を保持する 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() も試しましたが、同じ結果です。私は何を間違っていますか?

ちなみに、Arrays.copyOf() をサポートしていない Android API 8 をターゲットにしています。

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 に答える