为了账号安全,请及时绑定邮箱和手机立即绑定

Java泛型数组深拷贝和克隆泛型对象

Java泛型数组深拷贝和克隆泛型对象

海绵宝宝撒 2021-06-11 17:01:57
我想做一个 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 中有很多东西是不可能的,所以如果你只能得到一个也没关系,或者告诉我为什么它不起作用。
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

要深度复制多维数组,请使用以下代码。


请注意,这只是数组值的深度副本,而不是数组中任何非数组值的副本,因此副本仅对于多维原始数组才是真正的深度副本。对于多维对象数组,它是深浅的。


数组的声明类型无关紧要。例如, anObject[][]可以包含数组对象,使其(部分)成为 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;

}


查看完整回答
反对 回复 2021-06-17
  • 1 回答
  • 0 关注
  • 373 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信