Java子列表不返回列表的新实例

时间:2012-03-29 05:13:14

标签: java sublist

我偶然发现了一个问题,即Java子列表不返回列表实例但返回列表视图。这导致线程卡住了。

我做了一些谷歌搜索,发现this

2 个答案:

答案 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));