Java 泛型数组深度复制和克隆泛型对象
Java generic array deep copy and cloning generic object
我想深拷贝一个 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维双精度数组的代码。我想泛化任何原始类型 and/or 泛化数组的维度。两个我都想要,但是我知道Java里面的很多东西是不可能的,所以如果你只能得到一个也没关系,或者告诉我为什么它行不通。
谢谢!
要深度复制多维数组,请使用以下代码。
请注意,这只是 array 值的深拷贝,而不是数组中任何非数组值的深拷贝,因此该拷贝仅对多维基元而言才是真正的深拷贝阵列。多维对象数组深浅
数组的声明类型无关紧要。例如。 Object[][]
可以包含数组对象,使其(部分)成为 3D 数组。那些第 3 维数组也被复制了。
该方法将复制一维对象数组,而不是一维原始数组。要复制一维原始数组,请使用 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;
}
我想深拷贝一个 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维双精度数组的代码。我想泛化任何原始类型 and/or 泛化数组的维度。两个我都想要,但是我知道Java里面的很多东西是不可能的,所以如果你只能得到一个也没关系,或者告诉我为什么它行不通。
谢谢!
要深度复制多维数组,请使用以下代码。
请注意,这只是 array 值的深拷贝,而不是数组中任何非数组值的深拷贝,因此该拷贝仅对多维基元而言才是真正的深拷贝阵列。多维对象数组深浅
数组的声明类型无关紧要。例如。 Object[][]
可以包含数组对象,使其(部分)成为 3D 数组。那些第 3 维数组也被复制了。
该方法将复制一维对象数组,而不是一维原始数组。要复制一维原始数组,请使用 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;
}