我想知道是否可以使用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是对数组的引用(指向内存中的同一对象)。
这也是不安全的操作吗?
答案 0 :(得分:3)
val
和val2
都指向内存中的同一对象,即使您已将第一个列表克隆到第二个列表中。
您可以通过以下方式证明这一点:
System.out.println(val == val2);
打印“真”
也就是说,请注意,当您将集合传递给ArrayList
复制构造函数时,它所做的只是简单地构造一个包含指定集合元素的列表,因此我不确定为什么您期望它执行某种类型“深度复制”
答案 1 :(得分:0)
ArrayList<int[][][]> vec2=new ArrayList(vec);
这里您正在创建ArrayList
的新实例,但是vec
和vec2
都引用相同的三维数组。
您可以查看此question。这里是System.arraycopy
的Java 8文档