JAVA中使用list.subList()的注意事项

本文详细解析了Java集合框架中的List.subList方法,包括其功能、使用注意事项及示例代码分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.util.List中的subList方法,是返回list的一部分的视图。

如果做了非结构性修改,双方互相影响。

 

 

public static void main(String[] args){
        List<Integer> list = new ArrayList<Integer>();
        list.add(2);
        list.add(1);
        list.add(5);
        list.add(4);
        List<Integer> subList = list.subList(0, 2);
        subList.add(11);
        list.add(3);
        System.out.println(list.size());
        System.out.println(subList.size());
}

 执行上面的代码,就会报错;

 

 

6
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.SubList.checkForComodification(Unknown Source)
	at java.util.SubList.size(Unknown Source)
	at com.sitechasia.ebiz.news.web.NewsCategoryAction.main(NewsCategoryAction.java:228)

 将list.add(3);的操作注释,即可正常运行;但是需要注意的是:对subList操作的同时【subList.add(11);】,list的size也增加了1;

 

5
3
 

 

 

 另外,删除list的某一段值,可以这样;

 

list.subList(0, 2).clear();

 

### JavaList的相关内容与用法 #### List接口概述 `List` 接口是Java集合框架的一部分,它是一个有序的集合,允许存储重复的元素[^5]。通过索引来访问其中的元素,这使得 `List` 成为了处理顺序数据的理想选择。 #### 常见实现类 `List` 接口的主要实现类包括 `ArrayList` 和 `LinkedList`[^4]。 - **`ArrayList`**: 提供基于动态数组的数据结构,适合随机访问操作。 - **`LinkedList`**: 使用双向链表作为底层数据结构,更适合频繁插入和删除的操作。 #### 主要方法及其功能 以下是 `List` 接口中的一些核心方法: 1. **添加元素** - `boolean add(E element)`:向列表末尾添加一个元素。 - `void add(int index, E element)`:在指定位置插入一个元素[^2]。 2. **获取元素** - `E get(int index)`:返回指定索引处的元素[^2]。 3. **修改元素** - `E set(int index, E element)`:替换指定位置的元素并返回旧值[^2]。 4. **移除元素** - `E remove(int index)`:删除指定索引处的元素并返回该元素[^2]。 5. **查找元素** - `int indexOf(Object o)`:返回首次出现的指定元素的索引;如果不存在,则返回 `-1`[^2]。 6. **子集操作** - `List<E> subList(int fromIndex, int toIndex)`:返回从 `fromIndex` 开始到 `toIndex` 结束(不包含结束索引)的部分视图[^3]。 7. **其他实用方法** - `int size()`:返回列表中的元素数量。 - `boolean isEmpty()`:判断列表是否为空。 - `boolean contains(Object o)`:检查列表中是否存在某个特定元素。 #### 示例代码 以下是一些常见的 `List` 操作示例: ```java import java.util.ArrayList; import java.util.List; public class Example { public static void main(String[] args) { // 创建一个List实例 List<String> list = new ArrayList<>(); // 添加元素 list.add("Apple"); list.add("Banana"); list.add(1, "Orange"); // 在索引1的位置插入 // 获取元素 String firstElement = list.get(0); System.out.println("First Element: " + firstElement); // 修改元素 String replacedValue = list.set(0, "Grapes"); System.out.println("Replaced Value: " + replacedValue); // 删除元素 String removedValue = list.remove(1); System.out.println("Removed Value: " + removedValue); // 查找元素 int bananaIndex = list.indexOf("Banana"); System.out.println("Banana Index: " + bananaIndex); // 截取子集 List<String> sublist = list.subList(0, 1); System.out.println("Sublist: " + sublist); } } ``` #### 关于 `subList` 方法的重要注意事项 当调用 `subList(fromIndex, toIndex)` 方法时,生成的新列表是从 `fromIndex` 到 `toIndex - 1` 的范围[^3]。这意味着终止索引不会被包含在结果集中。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值