ArrayList的subList方法使用疑问:为何截取后仍输出完整列表?
解决ArrayList subList方法使用问题
核心问题
subList方法不会修改原列表,它返回的是原列表指定范围的视图对象。你之前的代码仅调用了subList但未保存返回结果,遍历原priceList自然还是完整数据。
正确用法
1. 直接使用subList返回的视图
将subList的返回值赋值给新变量,遍历这个变量即可得到目标子列表:
int[] prices = {71,11,65,99,21,82}; List<Integer> priceList = Arrays.stream(prices).boxed().collect(Collectors.toList()); // 保存subList的返回结果 List<Integer> subList = priceList.subList(3, priceList.size()); // 遍历子列表 for (Integer price : subList) { System.out.println(price); // 输出:99、21、82 }
2. 创建独立的子列表(与原列表解耦)
如果需要子列表不受原列表后续修改的影响,可以把subList的结果转成新的ArrayList:
List<Integer> independentSubList = new ArrayList<>(priceList.subList(3, priceList.size()));
补充说明
即使你把priceList初始化为new ArrayList<>(Arrays.stream(...)),原列表和subList返回的视图仍是关联的,但核心问题还是你没有使用subList的返回值——原列表本身不会因为调用subList而被截断。
内容的提问来源于stack exchange,提问作者user3153356
相关产品推荐
相关产品推荐

