JAVA如何手动分页
手动分页的实现方法
在Java中实现手动分页通常涉及对数据集合进行截取,结合页码和每页大小计算起始和结束索引。以下是常见的实现方式:
使用List.subList方法
对于内存中的集合(如List),可以直接使用subList方法截取分页数据:
List<T> dataList = ... // 原始数据集合
int pageNum = 2; // 当前页码(从1开始)
int pageSize = 10; // 每页大小
int startIndex = (pageNum - 1) * pageSize;
int endIndex = Math.min(startIndex + pageSize, dataList.size());
List<T> pageData = dataList.subList(startIndex, endIndex);
数据库查询分页
对于数据库查询,可通过SQL的LIMIT和OFFSET实现(MySQL/PostgreSQL):
String sql = "SELECT * FROM table_name LIMIT ? OFFSET ?";
int offset = (pageNum - 1) * pageSize;
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setInt(1, pageSize);
stmt.setInt(2, offset);
ResultSet rs = stmt.executeQuery();
使用Stream API分页
Java 8+的Stream API也可用于内存分页:
List<T> pageData = dataList.stream()
.skip((pageNum - 1) * pageSize)
.limit(pageSize)
.collect(Collectors.toList());
封装分页对象
通常需要返回包含分页信息的对象:

public class PageResult<T> {
private List<T> data;
private int totalPages;
private long totalElements;
private int currentPage;
// getters/setters
}
// 使用示例
int totalElements = dataList.size();
int totalPages = (int) Math.ceil((double) totalElements / pageSize);
PageResult<T> result = new PageResult<>(pageData, totalPages, totalElements, pageNum);
注意事项
- 页码通常从1开始计算,但编程中索引从0开始
- 需处理超出范围的情况(如
pageNum过大时返回空列表) - 数据库分页在大数据量时可能需优化(如使用游标代替OFFSET)






