我偶然发现了一个问题,即Java子列表不返回列表实例但返回列表视图。这导致线程卡住了。
我做了一些谷歌搜索,发现this。
答案 0 :(得分:6)
是的,List.subList
会返回一个视图,如下所示:
返回指定fromIndex(包含)和toIndex(独占)之间此列表部分的视图。 (如果fromIndex和toIndex相等,则返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。
是的,在视图的视图上创建视图......最终可能是一个坏主意。
故事的寓意不是“不要使用subList
” - 它是“确保你知道你要调用的方法应该做什么 - 阅读文档”。
答案 1 :(得分:0)
将近8年的线程但是,我仍然相信我的回答可能会对某人有所帮助。
如上面的乔恩·斯凯特(Jon Skeet)所述,subList
始终将引用返回到原始列表。
一个简单的解决方法是将其分配给新的ArrayList <>
例如:
List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
x.add(3);
x.add(4);
x.add(5);
List<Integer> y = new ArrayList<Integer>(x.subList(0, 4));