Java中截取ArrayList指定区间子集合最常用方法是subList(),它返回基于原列表的实时视图,修改会相互影响;需独立副本时应显式new ArrayList<>(list.subList(from, to))。

Java 中截取 ArrayList 指定区间的子集合,最常用、最直接的方式是使用 subList() 方法。
subList() 是视图,不是新 ArrayList
调用 list.subList(fromIndex, toIndex) 会返回一个**基于原列表的实时视图**,它共享底层数据。这意味着:
- 修改子列表会影响原 ArrayList(比如 add、remove、set);
- 原列表结构变化(如 add/remove 元素)可能导致子列表抛出
ConcurrentModificationException; - 返回的对象类型是
RandomAccessSubList(内部类),不是新的ArrayList。
需要独立副本?手动构造新 ArrayList
如果希望得到一份**完全独立、可自由增删改**的子集合,应显式创建新 ArrayList:
ArrayList<String> original = new ArrayList<>(Arrays.asList("a", "b", "c", "d", "e"));
ArrayList<String> subCopy = new ArrayList<>(original.subList(1, 4)); // ["b", "c", "d"]
这样得到的 subCopy 和原列表互不影响。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
注意索引边界和异常
subList(fromIndex, toIndex) 的规则与 String.substring 类似:
-
fromIndex包含,toIndex不包含(左闭右开); - 索引必须满足
0 ≤ fromIndex ≤ toIndex ≤ list.size(); - 否则抛出
IndexOutOfBoundsException(如 fromIndex 越界或 fromIndex > toIndex)。
实用小技巧:安全截取(防越界)
为避免运行时异常,可封装一个安全截取方法:
public static <T> List<T> safeSubList(List<T> list, int from, int to) {
if (list == null) return Collections.emptyList();
int size = list.size();
int start = Math.max(0, Math.min(from, size));
int end = Math.max(start, Math.min(to, size));
return new ArrayList<>(list.subList(start, end));
}
该方法自动修正越界值,适合不确定索引是否合法的场景。

















