从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]
答案 0 :(得分:2)
要获得所需的行为,您需要制作子列表的副本。
只调用subList“返回指定fromIndex(包含)和toIndex(独占)之间此列表部分的视图。”,“返回的列表由此列表支持,因此返回列表中的非结构更改是反映在这个清单中,反之亦然。“