使用Arraylist复制三维数组不安全?
is unsafe to copy a three-dimensional array using Arraylist?
我想知道是否可以使用 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 是对数组的引用(指向内存中的同一对象).
另外,这是不安全的操作吗?
即使您将第一个列表克隆到第二个列表后,val
和 val2
都指向内存中的同一个对象。
你可以证明这一点:
System.out.println(val == val2);
打印"true"
也就是说,请注意,当您将一个集合传递给 ArrayList
复制构造函数时,它所做的只是构造一个包含指定集合元素的列表,所以我不确定您为什么期望它执行某种类型的 "deep copying"
ArrayList<int[][][]> vec2=new ArrayList(vec);
此处您正在创建 ArrayList
的新实例,但 vec
和 vec2
都引用同一个三维数组。
你可以看看这个question. Here the Java 8 documentation for System.arraycopy
我想知道是否可以使用 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 是对数组的引用(指向内存中的同一对象).
另外,这是不安全的操作吗?
即使您将第一个列表克隆到第二个列表后,val
和 val2
都指向内存中的同一个对象。
你可以证明这一点:
System.out.println(val == val2);
打印"true"
也就是说,请注意,当您将一个集合传递给 ArrayList
复制构造函数时,它所做的只是构造一个包含指定集合元素的列表,所以我不确定您为什么期望它执行某种类型的 "deep copying"
ArrayList<int[][][]> vec2=new ArrayList(vec);
此处您正在创建 ArrayList
的新实例,但 vec
和 vec2
都引用同一个三维数组。
你可以看看这个question. Here the Java 8 documentation for System.arraycopy