临时ArrayList替换

时间:2019-04-24 21:11:21

标签: java

我正在将一个临时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]。

2 个答案:

答案 0 :(得分:0)

您刚刚将列表的引用复制到了新变量。这意味着您有2个引用arraytempArr指向同一对象。您可以从旧版本创建新的ArrayList

ArrayList<Integer> tempArr = new ArrayList<>(array);

答案 1 :(得分:0)

变量arraytempArr的展位指向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);