arraylist分页需用sublist()实现逻辑分页,时间复杂度o(1),通过计算from=(pagenum-1)*pagesize和to=math.min(size,from+pagesize)截取视图,注意边界校验、空值处理及修改影响原列表。

Java 中 ArrayList 本身不支持数据库式的分页查询,但可以通过截取子列表实现逻辑分页。关键在于避免全量加载+遍历,而是用 subList() 直接定位,时间复杂度 O(1) —— 因为它返回的是原列表的视图,不复制数据。
用 subList() 快速获取指定页的数据
subList(fromIndex, toIndex) 是最直接高效的方式。注意:索引左闭右开,且需手动校验边界,防止 IndexOutOfBoundsException。
- 计算起始索引:
int from = Math.max(0, (pageNum - 1) * pageSize) - 计算结束索引:
int to = Math.min(list.size(), from + pageSize) - 调用:
List<t> pageData = list.subList(from, to)</t>
封装成可复用的分页工具方法
把边界处理和空值检查收拢起来,避免每次重复写。例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
<font color="#888">public static <t> List<t> paginate(List<t> source, int pageNum, int pageSize) {
if (source == null || source.isEmpty() || pageNum = source.size() ? Collections.emptyList() : source.subList(from, to);
}</t></t></t></font>
注意 subList 返回的是“视图”,不是新副本
返回的子列表与原 ArrayList 共享底层数组。这意味着:
- 修改子列表会影响原列表(如
set()、remove()) - 若需独立副本,显式构造:
new ArrayList(list.subList(from, to)) - 子列表不支持
add()或clear()(会抛UnsupportedOperationException)
大数据量时慎用:内存与场景匹配
ArrayList 分页只适合数据已全部加载到内存的场景(如缓存、配置项、小规模结果集)。如果原始数据来自数据库且量大,应优先在 SQL 层分页(LIMIT offset, size 或 ROW_NUMBER()),而不是把几万条记录全查进内存再分页。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










