如何深度复制二维数组(不同的行大小)

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

既然我的问题是我想深入复制Java中的二维数组。 使用固定大小的行和列在1维甚至2维数组中进行操作时非常容易。 我的主要问题是我无法对我尝试复制的第二个数组进行初始化,例如:

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

因为行大小不固定并且每行索引中的更改(例如我尝试复制此数组):

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

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

我认为你的意思是列大小不固定。 无论如何,一个简单明了的方法是:

 public int[][] copy(int[][] input) { int[][] target = new int[input.length][]; for (int i=0; i  

您不必同时初始化两个维度:

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

有帮助吗?

Java 8 lambdas使这很容易:

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

如果你认为JDK-8056051更加清晰,你也可以编写.map(int[]::clone)

你可能需要这样的东西:

 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); } }