List<Integer> rest = new ArrayList<Integer>();
rest.add(1);
rest.add(2);
rest.add(3);
rest.subList(0, 1);
rest.subList(1, 3);
println(rest);
int i = 1;
List<Integer> newRest = rest.subList(0, i);
newRest.addAll(rest.subList(i + 1, rest.size()));
println(rest);
println
是打印列表的方法,为什么第一个println
将打印[1,2,3],但第二个println
将打印[1,3,2,3]
答案 0 :(得分:2)
您可以在subList()
的javadoc中看到解释:
...返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然......
换句话说,将一个元素添加到子列表中也会将其添加到原始列表中。
答案 1 :(得分:1)
正如您可以在官方Java文档中看到的那样:
返回指定fromIndex(包含)和toIndex(独占)之间此列表部分的视图。 (如果fromIndex和toIndex相等,则返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。
在您的代码中,newRest包含对rest的引用,因此当您向newRest添加项目时,您还将它们添加到原始列表中。这样做的正确方法是使用新的ArrayList()初始化newRest:
List<Integer> newRest = new ArrayList<Integer>(); newRest.addAll(rest.subList(0, i)); newRest.addAll(rest.subList(i + 1, rest.size()));
希望这会对你有所帮助。