6

これは、このようなコミュニティでの私の最初の質問です。そのため、問題のフォーマットは、そもそも申し訳ありませんが、あまり良くないかもしれません。

私の問題は、Javaで2次元配列をディープコピーしたいということです。行と列のサイズが固定された1次元または2次元の配列で実行すると、非常に簡単です。私の主な問題は、コピーしようとしている2番目の配列の初期化を作成できないことです。

int[][] copyArray = new int[row][column]

行サイズは固定されておらず、この配列をコピーしようとするなど、各行インデックスが変更されるため、次のようになります。

int[][] envoriment = {{1, 1, 1, 1}, {0, 1, 6}, {1}};

ですから、私が言うなら、私new int[3][4]が望まない余分なスペースがあるでしょう。このような2次元配列をディープコピーする方法はありますか?

4

4 に答える 4

10

あなたが言いたいのは、列のサイズが固定されていないということだと思います。とにかく簡単で簡単な方法は次のとおりです。

public int[][] copy(int[][] input) {
      int[][] target = new int[input.length][];
      for (int i=0; i <input.length; i++) {
        target[i] = Arrays.copyOf(input[i], input[i].length);
      }
      return target;
}
于 2011-04-06T08:12:42.840 に答える
2

両方のディメンションを同時に初期化する必要はありません。

int[][] test = new int[100][];
test[0] = new int[50];

それは役に立ちますか?

于 2011-04-06T08:07:35.133 に答える
1

Java 8 ラムダを使用すると、これが簡単になります。

int[][] copy = Arrays.stream(envoriment).map(x -> x.clone()).toArray(int[][]::new);

より明確だと思われる場合は、JDK-8056051.map(int[]::clone)が修正された後に書き込むこともできます。

于 2014-10-24T03:12:55.387 に答える
-2

次のようなものが必要になる場合があります。

public class Example {
  public static void main(String[] args) {

    int[][] envoriment = {{1, 1, 1, 1}, {0, 1, 6}, {1}};

    int[][] copyArray = new int[envoriment.length][];
    System.arraycopy(envoriment, 0, copyArray, 0, envoriment.length);
  }
}
于 2011-04-06T08:11:53.397 に答える