arraylist 本身不提供分页方法,但可通过 sublist() 实现逻辑分页:起始索引为 (currentpage-1)*pagesize,结束索引为 math.min(fromindex+pagesize, list.size()),并用 new arraylist() 包装子列表以避免视图关联问题。

Java 中的 ArrayList 本身不提供分页方法,但可以通过计算起始索引和截取长度,用 subList() 实现逻辑分页。
计算起始索引和截取数量
分页关键在于确定当前页的起始位置(fromIndex)和要取多少条(pageSize)。注意:索引从 0 开始,且不能越界。
- 起始索引 = (currentPage - 1) * pageSize(第一页是 page=1)
- 结束索引 = Math.min(fromIndex + pageSize, list.size())
- 需确保
fromIndex ,否则抛 <code>IndexOutOfBoundsException
安全调用 subList() 截取数据
subList() 返回的是原列表的视图(非新 ArrayList),修改会影响原列表。如需独立副本,应包装成新 ArrayList。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- 基础截取:
list.subList(fromIndex, toIndex) - 生成新列表(推荐):
new ArrayList(list.subList(fromIndex, toIndex)) - 若
fromIndex >= list.size(),直接返回空列表,避免异常
封装一个通用分页工具方法
把边界判断和截取逻辑收拢,提高复用性和健壮性:
public static <t> List<t> paginate(List<t> data, int currentPage, int pageSize) {
if (data == null || data.isEmpty() || currentPage ();
}
int fromIndex = (currentPage - 1) * pageSize;
int toIndex = Math.min(fromIndex + pageSize, data.size());
if (fromIndex >= data.size()) {
return new ArrayList();
}
return new ArrayList(data.subList(fromIndex, toIndex));
}
</t></t></t>使用示例:paginate(users, 2, 10) 表示取第 2 页、每页 10 条。
注意 subList 的“坑”
subList 返回的子列表与原列表强关联:
- 对子列表调用
add()、remove()会抛UnsupportedOperationException(除非原列表也支持) - 修改原列表结构(如
clear()、remove())可能导致子列表失效或抛ConcurrentModificationException - 只要不修改结构,读取和遍历是安全的;需要独立操作时务必用
new ArrayList(...)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










