从LinkedList(list1)的实例创建子列表(list3),在子列表上调用clear()方法,不要期望list1也被更改

时间:2016-03-13 03:10:44

标签: java list

list3创建子列表(即list1)之后,我在list3上调用了clear()方法,期望list3将被清除而list1将保持不变。但是,结果清楚地表明list1也已更改。为什么会这样?

List<Integer> list1 = new LinkedList<>(Arrays.asList(null, 22, 33, 44, 22));

List<Integer> list3 = list1.subList(1, 3);
System.out.println(list3);

list3.clear();

System.out.println(list3);
System.out.println(list1);

结果:

[22, 33]
[]
[null, 44, 22]

1 个答案:

答案 0 :(得分:2)

要获得所需的行为,您需要制作子列表的副本。

只调用subList“返回指定fromIndex(包含)和toIndex(独占)之间此列表部分的视图。”,“返回的列表由此列表支持,因此返回列表中的非结构更改是反映在这个清单中,反之亦然。“

[java.util.List API documentation]