我正在将一个临时ArrayList设置为等于预先建立的ArrayList。对临时ArrayList的更改似乎也转移到了预先建立的列表上。为什么会发生这种情况?如何保持预先建立的ArrayList不变?
我知道在涉及整数的情况下不会发生此现象。
ArrayList<Integer> array = new ArrayList<>();
for (int i = 0; i < 3; i++){
array.add(i);
}
ArrayList<Integer> tempArr = array;
tempArr.remove(0);
我期望数组为[0,1,2],但我得到[1,2]。我希望输出为array = [0,1,2]和tempArr = [1,2]。
答案 0 :(得分:0)
您刚刚将列表的引用复制到了新变量。这意味着您有2个引用array
和tempArr
指向同一对象。您可以从旧版本创建新的ArrayList
:
ArrayList<Integer> tempArr = new ArrayList<>(array);
答案 1 :(得分:0)
变量array
和tempArr
的展位指向ArrayList<Integer>
对象的同一实例,因此修改其中一个将更改另一个。
您需要创建新实例,然后将所有元素转移到其中:
ArrayList<Integer> array = new ArrayList<>();
for (int i = 0; i < 3; i++){
array.add(i);
}
ArrayList<Integer> tempArr = new Arraylist<>();
tempArr.addAll(array);
tempArr.remove(0);
由于Arraylist <>为您提供了将添加另一个集合中的元素的构造函数,因此也可以简化此代码:
ArrayList<Integer> tempArr = new Arraylist<>(array);
tempArr.remove(0);