Java 开发 - List subList 方法

List subList 方法

1、基本介绍
  • subList 方法用于获取原列表的一个视图,而不是创建一个新的独立列表
java 复制代码
List<E> subList(int fromIndex, int toIndex);
参数 说明
fromIndex 起始索引(包含)
toIndex 结束索引(不包含)
2、基本使用
java 复制代码
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E"));

List<String> sub = list.subList(1, 4);

System.out.println(sub);
复制代码
# 输出结果

[B, C, D]
3、核心特性
  • 对子列表的修改(增删改)会直接影响原列表
java 复制代码
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E"));
System.out.println(list);

List<String> sub = list.subList(1, 4);

sub.set(0, "X");
System.out.println(list);

sub.add("F");
System.out.println(list);
复制代码
# 输出结果

[A, B, C, D, E]
[A, X, C, D, E]
[A, X, C, D, F, E]
4、注意事项
  • 对原列表进行了结构性修改(增加或删除元素,不包括修改元素值),那么子列表会变得不可用
java 复制代码
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E"));

List<String> sub = list.subList(1, 4);

list.set(1, "BB");

try {
    System.out.println(sub.get(0));
} catch (Exception e) {
    e.printStackTrace();
}

list.add("F");

try {
    System.out.println(sub.get(0));
} catch (Exception e) {
    e.printStackTrace();
}

try {
    System.out.println(sub.size());
} catch (Exception e) {
    e.printStackTrace();
}
复制代码
# 输出结果

BB
java.util.ConcurrentModificationException
    ...
java.util.ConcurrentModificationException
    ...
5、实例实操
  • 在原 List 上操作(不创建新对象)只保留前 5 个元素
java 复制代码
List<String> list = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
    list.add("元素" + i);
}
System.out.println("原列表: " + list);

if (list.size() > 5) {
    list.subList(5, list.size()).clear();
}
System.out.println("截取后: " + list);
复制代码
# 输出结果

原列表: [元素1, 元素2, 元素3, 元素4, 元素5, 元素6, 元素7, 元素8, 元素9, 元素10]
截取后: [元素1, 元素2, 元素3, 元素4, 元素5]
相关推荐
code2cat2 小时前
Java进阶篇之LongAdder:把统计更新分散,再读取总和
java·并发编程·原子类·longadder
凯哥Java2 小时前
写代码怎么避免逻辑漏洞?
java·开发语言·人工智能·自动化
Ivanqhz2 小时前
正余弦位置编码(Sinusoidal Positional Encoding)
java·linux·数据库
BD_Marathon3 小时前
消息对象中字段的说明
java·前端·python
zlpzlpzyd3 小时前
nacos的openapi地址
java
落魄实习生4 小时前
Agent Scope Java 2.x 系列【10】Middleware
java·开发语言·ai
ZealSinger4 小时前
Spring7 RestTemplate弃用迁移
java·spring·后端开发·restclient
朝朝辞暮i5 小时前
C++ 第 13 课:值传递 —— 为什么函数里改了,外面却没变?
java·c++·算法
弹简特5 小时前
【Java项目-企悦抽】16-抽奖模块01-获取活动完整信息接口实现
java·开发语言·状态模式·springboot
Vex2une5 小时前
Windows 任务管理器发展史:从 80KB 救急工具到系统级监控平台
windows·进程管理·性能监控·任务管理器·winui·cpu使用率·taskmgr