这是我在这样的社区中的第一个问题,所以我的格式可能不是很好,对此抱歉。
现在我的问题是我想在Java中深度复制2维数组。使用固定大小的行和列在1维甚至2维数组中进行操作时非常容易。我的主要问题是我无法对我尝试复制的第二个数组进行初始化,例如:
int[][] copyArray = new int[row][column]
因为行大小不固定并且每行索引都发生了变化,例如我尝试复制此数组:
int[][] envoriment = {{1, 1, 1, 1}, {0, 1, 6}, {1}};
所以你看,如果我说new int[3][4]
会有额外的空间,我不想要。有没有一种深度复制这种二维数组的方法?
答案 0 :(得分: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;
}
答案 1 :(得分:2)
您不必同时初始化两个维度:
int[][] test = new int[100][];
test[0] = new int[50];
有帮助吗?
答案 2 :(得分:1)
Java 8 lambdas使这很容易:
int[][] copy = Arrays.stream(envoriment).map(x -> x.clone()).toArray(int[][]::new);
如果您认为JDK-8056051已修复,您也可以在.map(int[]::clone)
之后撰写{{1}}。
答案 3 :(得分:-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);
}
}