使用Arraylist复制三维数组是不安全的吗?

时间:2018-12-10 17:26:41

标签: java arrays arraylist unsafe

我想知道是否可以使用ArrayList <>()作为中间步骤来复制3维数组。

请考虑以下代码:

        /*variable declaration*/
        int[][][] array;
        int[][][] array2;
        ArrayList<int[][][]> list;
        ArrayList<int[][][]> list2;

        /*initialization*/
        array = new int[10][12][14];
        list = new ArrayList<>();

        list.add(array);

        //Construct 'list2', using all the elements contained in 'list'
        list2 = new ArrayList(list);

        array2 = list2.get(0);

我想知道array2是数组的完整副本(深层副本),还是array2是对数组的引用(指向内存中的同一对象)。

这也是不安全的操作吗?

2 个答案:

答案 0 :(得分:3)

valval2都指向内存中的同一对象,即使您已将第一个列表克隆到第二个列表中。

您可以通过以下方式证明这一点:

System.out.println(val == val2);

打印“真”

也就是说,请注意,当您将集合传递给ArrayList复制构造函数时,它所做的只是简单地构造一个包含指定集合元素的列表,因此我不确定为什么您期望它执行某种类型“深度复制”

答案 1 :(得分:0)

ArrayList<int[][][]> vec2=new ArrayList(vec);

这里您正在创建ArrayList的新实例,但是vecvec2都引用相同的三维数组。

您可以查看此question。这里是System.arraycopy

的Java 8文档