我想对n维原始数组进行深层复制。
public static double[] deepCopy(double[] arr) {
return arr.clone();
}
public static double[][] deepCopy(double[][] arr) {
arr = arr.clone();
for (int i = 0; i < arr.length; i++) {
arr[i] = deepCopy(arr[i]);
}
return arr;
}
public static double[][][] deepCopy(double[][][] arr) {
arr = arr.clone();
for (int i = 0; i < arr.length; i++) {
arr[i] = deepCopy(arr[i]);
}
return arr;
}
以上是用于深度复制1、2和3维双精度数组的代码。我想归纳为任何原始类型和/或归纳为数组的维数。我都想要,但是我知道用Java不可能完成很多事情,因此,如果您只能获得一个,或者告诉我为什么它不起作用,那是可以的。
谢谢!
答案 0 :(得分:2)
要深度复制多维数组,请使用以下代码。
请注意,这只是 array 值的深层副本,而不是数组中任何非数组值,因此该副本仅对于多维基本数组真正深。对于多维对象数组,它是浅层的。
声明的数组类型无关紧要。例如。 Object[][]
可以包含数组对象,使其(部分)成为3D数组。这些第三维数组也将被复制。
该方法将复制一维对象数组,但不会复制一维基本数组。要复制一维基本数组,请使用clone()
。
@SuppressWarnings("unchecked")
public static <T> T[] deepCopyArray(T[] array) {
return (T[]) deepCopyArrayInternal(array);
}
private static Object deepCopyArrayInternal(Object array) {
int length = Array.getLength(array);
Object copy = Array.newInstance(array.getClass().getComponentType(), length);
for (int i = 0; i < length; i++) {
Object value = Array.get(array, i);
if (value != null && value.getClass().isArray())
value = deepCopyArrayInternal(value);
Array.set(copy, i, value);
}
return copy;
}