当添加到ArrayList中的变量发生更改时,ArrayList是否会自行更新?

时间:2018-06-26 00:14:54

标签: arraylist

private static ArrayList<ArrayList<Integer>> listlist = new ArrayList<ArrayList<Integer>>();
private static ArrayList<Integer> list = new ArrayList<Integer>();
private static ArrayList<Integer> temp = new ArrayList<Integer>();

public static void main(String args[]) {
    list.add(10);
    list.add(20);
    listlist.add(list);

    temp = list;
    temp.add(30);
    listlist.set(0,temp);

    System.out.println("size before temp is cleared: " + listlist.get(0).size());
    temp.clear();
    System.out.println("size after temp is cleared: " + listlist.get(0).size());
}

Output:
size before temp is cleared: 3
size after temp is cleared: 0

这是导致问题的代码的简化部分。您可以看到如何将temp添加到listlist,并且在执行该操作后清除temp时,listlist似乎会更新自身并清除索引0中的内容也是

每更改用于插入值的变量,ArrayList就会自动更新吗?需要帮助。

1 个答案:

答案 0 :(得分:1)

arrayList将保留对您提供的内容的引用。在您的情况下,temp和list都是对同一对象的引用(因此,无需在listlist中进行设置)。当您执行temp.clear时,将清除“ temp”和“ list”(相同)引用的列​​表对象。您的列表列表保留了对该对象的引用。它不是“自动更新自身”。它不需要,它从未复制过。我附上一张图表,可能会帮助您理解。圆圈代表对象。箭头表示存在指向所指向对象的引用(包含在另一个对象中,或者是您的对象,我写了名称/标识符)

diagram