java使用sublist分割list
时间: 2025-06-02 17:13:24 浏览: 18
### Java 中使用 `subList` 方法对 List 进行分割的示例
在 Java 中,`subList` 方法允许从一个列表中提取子列表。通过结合循环和 `subList` 方法,可以将一个较大的列表分割成多个较小的子列表[^2]。
以下是实现分割功能的完整代码示例:
```java
import java.util.ArrayList;
import java.util.List;
public class ListSplitter {
/**
* 将列表分割成多个批次。
*
* @param <E> 列表元素类型
* @param list 输入的元素列表
* @param batchSize 批次大小
* @return 分割后的批次列表
*/
public static <E> List<List<E>> splitList(List<E> list, int batchSize) {
List<List<E>> batches = new ArrayList<>();
for (int i = 0; i < list.size(); i += batchSize) {
int end = Math.min(i + batchSize, list.size());
// 使用 subList 提取子列表,并将其添加到结果集中
batches.add(new ArrayList<>(list.subList(i, end)));
}
return batches;
}
public static void main(String[] args) {
List<String> originalList = new ArrayList<>();
originalList.add("A");
originalList.add("B");
originalList.add("C");
originalList.add("D");
originalList.add("E");
originalList.add("F");
int batchSize = 2;
List<List<String>> result = splitList(originalList, batchSize);
System.out.println(result); // 输出: [[A, B], [C, D], [E, F]]
}
}
```
#### 关键点解析
1. **`subList` 方法**:`subList` 方法返回的是原列表的一个视图,因此对子列表的修改可能会影响原列表的内容。为了避免这种影响,通常会将子列表转换为一个新的独立列表(如上述代码中的 `new ArrayList<>(...)`)[^3]。
2. **边界处理**:通过 `Math.min(i + batchSize, list.size())` 确保不会超出原列表的范围。
3. **泛型支持**:上述方法支持任意类型的列表,通过泛型 `<E>` 实现了灵活性。
#### 注意事项
- 如果原列表被修改(例如添加或删除元素),可能会导致子列表的行为不可预测,甚至抛出异常。这是因为 `subList` 返回的是原列表的一部分视图,而不是独立的副本[^4]。
- 在多线程环境中,如果需要对分割后的子列表进行并发操作,建议确保线程安全性,或者直接创建独立的副本以避免竞争条件。
---
阅读全文
相关推荐



















