java代码 数据较大的list 进行分页
时间: 2024-03-17 14:45:08 浏览: 60
对于数据较大的 `List` 进行分页时,为了避免加载过多的数据导致内存溢出,我们可以采用分段查询的方式,每次只查询当前页需要的记录。这可以通过数据库的分页查询语句来实现,但如果没有使用数据库,我们可以通过 `List` 的 `subList` 方法来实现分页。
以下是一个基于 `subList` 的 Java 分页实现示例:
```java
public class Pagination {
private int pageSize; // 每页显示的记录数
private int currentPage; // 当前页码
private int totalCount; // 记录总数
private List<Object> items; // 记录列表
public Pagination(int pageSize, int currentPage, int totalCount, List<Object> items) {
this.pageSize = pageSize;
this.currentPage = currentPage;
this.totalCount = totalCount;
this.items = items;
}
// 获取总页数
public int getTotalPage() {
return (int) Math.ceil((double) totalCount / pageSize);
}
// 获取当前页的起始位置
public int getStartIndex() {
return (currentPage - 1) * pageSize;
}
// 获取当前页的记录列表
public List<Object> getCurrentPageItems() {
int fromIndex = getStartIndex();
int toIndex = Math.min(fromIndex + pageSize, totalCount);
return items.subList(fromIndex, toIndex);
}
// 判断是否有上一页
public boolean hasPreviousPage() {
return currentPage > 1;
}
// 判断是否有下一页
public boolean hasNextPage() {
return currentPage < getTotalPage();
}
// 获取上一页的页码
public int getPreviousPage() {
return hasPreviousPage() ? currentPage - 1 : 1;
}
// 获取下一页的页码
public int getNextPage() {
return hasNextPage() ? currentPage + 1 : getTotalPage();
}
}
```
使用时,我们可以先从数据源中查询出所有的记录,然后再将其传入 `Pagination` 对象。在获取当前页的记录列表时,我们只需要根据当前页码和每页显示的记录数计算出需要查询的记录的起始和结束位置,然后调用 `subList` 方法来获取指定范围内的记录列表。
需要注意的是,由于 `subList` 方法返回的是原有列表的一个视图,因此在分页时要避免对其进行修改。如果需要对分页后的数据进行修改,可以将其复制到一个新的列表中。
阅读全文