一个好用的java分页算法,代码如下,只需要分页参数继承Pageable类就可以很方便分页了
package cn.com.base.common.pagination;

/**
* 分页基类
*
* @author cary
* @since 2013-1-23 下午3:03:32
*/
public class Pageable implements java.io.Serializable { private static final long serialVersionUID = 1L; /**
* 每页默认的项数(10)
*/
public static final int DEFAULT_ITEMS_PER_PAGE = ; /**
* 滑动窗口默认的大小(7)
*/
public static final int DEFAULT_SLIDER_SIZE = ; /**
* 表示项数未知(<code>Integer.MAX_VALUE</code>)
*/
public static final int UNKNOWN_ITEMS = Integer.MAX_VALUE; /**
* 状态量
*/
private int page; // 当前页码
private int items; // 总共项数
private int itemsPerPage; // 每页项数。
private int startRow; // 开始条数
private int endRow;// 结束条数 /**
* 创建一个分页器,初始项数为无限大<code>UNKNOWN_ITEMS</code>,默认每页显示<code>10</code>项
*/
public Pageable() {
this();
} /**
* 创建一个分页器,初始项数为无限大<code>UNKNOWN_ITEMS</code>,指定每页项数
*
* @param itemsPerPage 每页项数。
*/
public Pageable(int itemsPerPage) {
this(itemsPerPage, UNKNOWN_ITEMS);
} /**
* 创建一个分页器,初始项数为无限大<code>UNKNOWN_ITEMS</code>,指定每页项数
*
* @param itemsPerPage 每页项数
* @param items 总项数
*/
public Pageable(int itemsPerPage, int items) {
this.items = (items >= ) ? items : ;
this.itemsPerPage = (itemsPerPage > ) ? itemsPerPage : DEFAULT_ITEMS_PER_PAGE;
this.page = calcPage();
} /**
* 取得总页数。
*
* @return 总页数
*/
public int getPages() {
if (items <= ) {
return ;
}
return (int) Math.ceil((double) items / itemsPerPage);
} /**
* 取得当前页。
*
* @return 当前页
*/
public int getPage() {
return page;
} /**
* 设置并取得当前页
*
* @param page 当前页
* @return 设置后的当前页
*/
public int setPage(int page) {
return (this.page = calcPage(page));
} /**
* 取得总项数。
*
* @return 总项数
*/
public int getItems() {
return items;
} /**
* 设置并取得总项数。如果指定的总项数小于0,则被看作0
*
* @param items总项数
* @return 设置以后的总项数
*/
public int setItems(int items) {
this.items = (items >= ) ? items : ;
setPage(page);
return this.items;
} /**
* 取得每页项数。
*
* @return 每页项数
*/
public int getItemsPerPage() {
return itemsPerPage;
} /**
* 设置并取得每页项数。如果指定的每页项数小于等于0,则使用默认值<code>DEFAULT_ITEMS_PER_PAGE</code>
* 并调整当前页使之在改变每页项数前后显示相同的项
*
* @param itemsPerPage 每页项数
* @return 设置后的每页项数
*/
public int setItemsPerPage(int itemsPerPage) {
int tmp = this.itemsPerPage;
this.itemsPerPage = (itemsPerPage > ) ? itemsPerPage : DEFAULT_ITEMS_PER_PAGE;
if (page > ) {
setPage((int) (((double) (page - ) * tmp) / this.itemsPerPage) + );
}
return this.itemsPerPage;
} /**
* 取得当前页的长度,即当前页的实际项数。相当于 <code>endIndex() - beginIndex() + 1</code>
*
* @return 当前页的长度
*/
public int getLength() {
if (page > ) {
return Math.min(itemsPerPage * page, items) - (itemsPerPage * (page - ));
} else {
return ;
}
}
/**
* 取得首页页码。
*
* @return 首页页码
*/
public int getFirstPage() {
return calcPage();
} /**
* 取得末页页码。
*
* @return 末页页码
*/
public int getLastPage() {
return calcPage(getPages());
} /**
* 取得前一页页码。
*
* @return 前一页页码
*/
public int getPreviousPage() {
return calcPage(page - );
} /**
* 取得前n页页码
*
* @param n 前n页
* @return 前n页页码
*/
public int getPreviousPage(int n) {
return calcPage(page - n);
} /**
* 取得后一页页码。
*
* @return 后一页页码
*/
public int getNextPage() {
return calcPage(page + );
} /**
* 取得后n页页码。
*
* @param n 后n面
* @return 后n页页码
*/
public int getNextPage(int n) {
return calcPage(page + n);
} /**
* 判断指定页码是否被禁止,也就是说指定页码超出了范围或等于当前页码。
*
* @param page 页码
* @return boolean 是否为禁止的页码
*/
public boolean isDisabledPage(int page) {
return ((page < ) || (page > getPages()) || (page == this.page));
} /**
* 计算页数,但不改变当前页。
*
* @param page 页码
* @return 返回正确的页码(保证不会出边界)
*/
protected int calcPage(int page) {
int pages = getPages(); if (pages > ) {
return (page < ) ? : ((page > pages) ? pages : page);
} return ;
} /**
* 创建复本。
*
* @return 复本
*/
public Object clone() {
try {
return super.clone();
} catch (java.lang.CloneNotSupportedException e) {
return null; // 不可能发生
}
} /**
* @param startRow the startRow to set
*/
public void setStartRow(int startRow) {
this.startRow = startRow;
} /**
* @param endRow the endRow to set
*/
public void setEndRow(int endRow) {
this.endRow = endRow;
} /**
* @return the startRow
*/
public int getStartRow() {
if (page > ) {
startRow = (itemsPerPage * (page - )) + ;
} else {
startRow = ;
}
return startRow;
} /**
* @return the endRow
*/
public int getEndRow() {
if (page > ) {
endRow = Math.min(itemsPerPage * page, items);
} else {
endRow = ;
}
return endRow;
} }

版权声明:本文为博主原创文章,未经博主允许不得转载。

一个方便的java分页算法的更多相关文章

  1. java分页算法,传入当前pageIndex,pageSise,dataTotal可计算出页面上显示的页码,和是否启动上一页下一页

    public class CalculationPage { private Boolean showStartPagerDot; private Boolean showEndPagerDot; p ...

  2. java分页算法

    int totalPageNum = (totalRecord  +  pageSize  - 1) / pageSize;

  3. Java 分页之最简单的算法

    分页实现有很多方式,如jQuery自带框架pagination或在java封装一个类pager等.   下写一个简单易懂的分页算法   逻辑:   // 步骤1:设置每页页数大小 long pageS ...

  4. Java中常见的分页算法

    在查询数据的时候或者展示数据的时候经常会使用分页,介绍几种简单的分页算法: //总的页数 int total = 30: //每页个数 int pageSize = 6; 1.one     int ...

  5. 浅谈Java分页技术

    话不多言.我们要实现java分页技术,我们首先就需要定义四个变量,他们是: int  pageSize;//每页显示多少条记录 int pageNow;//希望现实第几页 int pageCount; ...

  6. 分享一个完整的Mybatis分页解决方案

    Mybatis 的物理分页是应用中的一个难点,特别是配合检索和排序功能叠加时更是如此. 我在最近的项目中开发了这个通用分页器,过程中参考了站内不少好文章,阅读源码帮助更大minglisoft.cn/t ...

  7. 史上最全的java随机数生成算法分享(转)

    这篇文章主要介绍了史上最全的java随机数生成算法,我分享一个最全的随机数的生成算法,最代码的找回密码的随机数就是用的这个方法 String password = RandomUtil.generat ...

  8. JAVA经典算法40题及解答

    JAVA经典算法40题 [程序1]   题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分 ...

  9. Java基础算法集50题

    最近因为要准备实习,还有一个蓝桥杯的编程比赛,所以准备加强一下算法这块,然后百度了一下java基础算法,看到的都是那50套题,那就花了差不多三个晚自习的时间吧,大体看了一遍,做了其中的27道题,有一些 ...

随机推荐

  1. Spark Streaming 例子

    NetworkWordCount.scala /* * Licensed to the Apache Software Foundation (ASF) under one or more * con ...

  2. NFS各个版本之间的比较

    NFS是一种网络文件系统,从1985年推出至今,共发布了3个版本:NFSv2.NFSv3.NFSv4,NFSv4包含两个次版本NFSv4.0和NFSv4.1.经过20多年发展,NFS发生了非常大的变化 ...

  3. 在 Linux 下使用mdadm创建 RAID 5

    在 RAID 5 中,数据条带化后存储在分布式奇偶校验的多个磁盘上.分布式奇偶校验的条带化意味着它将奇偶校验信息和条带化数据分布在多个磁盘上,这样会有很好的数据冗余. 在 Linux 中配置 RAID ...

  4. 在线聊天室 -onlinechat

    做了一个 在线聊天室,目前没什么人气,希望能被百度收录,给大家提供一个相对好的聊天环境 在线聊天室:http://www.3003soft.top/im

  5. selenium+python自动化90-unittest多线程执行用例

    前言 假设执行一条脚本(.py)用例一分钟,那么100个脚本需要100分钟,当你的用例达到一千条时需要1000分钟,也就是16个多小时... 那么如何并行运行多个.py的脚本,节省时间呢?这就用到多线 ...

  6. OpenACC 与 CUDA 的相互调用

    ▶ 按照书上的代码完成了 OpenACC 与CUDA 的相互调用,以及 OpenACC 调用 cuBLAS.便于过程遇到了很多问题,注入 CUDA 版本,代码版本,计算能力指定等,先放在这里,以后填坑 ...

  7. JAVA WebSocKet ( 简单的聊天室 )

    1, 前端代码 登入页 -> login.html <!DOCTYPE html> <html> <head> <meta charset=" ...

  8. leetcode415

    public class Solution { public string AddStrings(string num1, string num2) { //判断num1和num2的长度,进行对齐 i ...

  9. input文本框 放上图片img 通过padding relative和absolute 的实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Spring mvc 返回json包含双引号问题 解决

    解决方式1: @RequestMapping(value="/shopsList.json", produces = "text/html;charset=UTF-8&q ...