Java 如何深度复制二维数组(不同的行大小)
这是我在这样一个社区里的第一个问题,所以我讨论的格式可能不是很好,首先对此表示抱歉 现在我的问题是我想在Java中深度复制一个二维数组。在固定大小的行和列的一维甚至二维数组中进行操作非常容易。我的主要问题是无法对尝试复制的第二个阵列进行初始化,例如:Java 如何深度复制二维数组(不同的行大小),java,arrays,deep-copy,dimension,Java,Arrays,Deep Copy,Dimension,这是我在这样一个社区里的第一个问题,所以我讨论的格式可能不是很好,首先对此表示抱歉 现在我的问题是我想在Java中深度复制一个二维数组。在固定大小的行和列的一维甚至二维数组中进行操作非常容易。我的主要问题是无法对尝试复制的第二个阵列进行初始化,例如: int[][] copyArray = new int[row][column] 因为行大小不是固定的,并且每个行索引都会发生更改,例如我尝试复制此数组: int[][] envoriment = {{1, 1, 1, 1}, {0, 1, 6}
int[][] copyArray = new int[row][column]
因为行大小不是固定的,并且每个行索引都会发生更改,例如我尝试复制此数组:
int[][] envoriment = {{1, 1, 1, 1}, {0, 1, 6}, {1}};
所以你看,如果我说
newint[3][4]
会有我不想要的额外空格。有没有一种方法可以深度复制这种二维数组?您不必同时初始化两个维度:
int[][] test = new int[100][];
test[0] = new int[50];
它有用吗?您可能需要这样的东西:
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);
}
}
我想你的意思是,列的大小不是固定的。无论如何,一个简单直接的方法是:
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;
}
public int[][]复制(int[][]输入){
int[][]目标=新的int[input.length][];
对于(int i=0;iJava 8 lambdas,这很容易:
int[][] copy = Arrays.stream(envoriment).map(x -> x.clone()).toArray(int[][]::new);
您还可以编写.map(int[]::clone)
after是固定的,如果你认为这更清楚的话。你建议的代码是浅层复制,不是吗?arraycopy会将环境数组的每个值复制到新数组中。它是:它会将引用复制到原始行。它不会复制子数组。@rliby和@Helios,你们确定它会进行浅层复制吗?我Think is做了一个深度复制。在这种情况下,让我重温一下。我可能错了。谢谢你指出。这是浅层复制,你正在复制对一维数组的引用,你可以通过在你的代码后面添加这个来检查:envoriment[2][0]=5;并检查copyArray[2][0]现在也是5哦,这些信息会有帮助的。我从来没有想过在不同的时间初始化维度。太棒了,这是我通常寻求的。感谢他们帮助我的所有答案:)