6

这是我在这样的社区中的第一个问题,所以我有问题的格式可能不是很好,首先抱歉。

现在我的问题是我想在 Java 中深度复制一个二维数组。在具有固定大小的行和列的一维甚至二维数组中执行此操作非常容易。我的主要问题是我无法为我尝试复制的第二个数组进行初始化,例如:

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

因为行大小不是固定的,并且每个行索引都会发生变化,例如我尝试复制此数组:

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

所以你看,如果我说new int[3][4]会有我不想要的额外空间。有没有一种方法可以深度复制这种二维数组?

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 lambda 使这变得简单:

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 回答