一个好用的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 = 10;
/**
* 滑动窗口默认的大小(7)
*/
public static final int DEFAULT_SLIDER_SIZE = 7;
/**
* 表示项数未知(<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(0);
}
/**
* 创建一个分页器,初始项数为无限大<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 >= 0) ? items : 0;
this.itemsPerPage = (itemsPerPage > 0) ? itemsPerPage : DEFAULT_ITEMS_PER_PAGE;
this.page = calcPage(0);
}
/**
* 取得总页数。
*
* @return 总页数
*/
public int getPages() {
if (items <= 0) {
return 1;
}
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 >= 0) ? items : 0;
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 > 0) ? itemsPerPage : DEFAULT_ITEMS_PER_PAGE;
if (page > 0) {
setPage((int) (((double) (page - 1) * tmp) / this.itemsPerPage) + 1);
}
return this.itemsPerPage;
}
/**
* 取得当前页的长度,即当前页的实际项数。相当于 <code>endIndex() - beginIndex() + 1</code>
*
* @return 当前页的长度
*/
public int getLength() {
if (page > 0) {
return Math.min(itemsPerPage * page, items) - (itemsPerPage * (page - 1));
} else {
return 0;
}
}
/**
* 取得首页页码。
*
* @return 首页页码
*/
public int getFirstPage() {
return calcPage(1);
}
/**
* 取得末页页码。
*
* @return 末页页码
*/
public int getLastPage() {
return calcPage(getPages());
}
/**
* 取得前一页页码。
*
* @return 前一页页码
*/
public int getPreviousPage() {
return calcPage(page - 1);
}
/**
* 取得前n页页码
*
* @param n 前n页
* @return 前n页页码
*/
public int getPreviousPage(int n) {
return calcPage(page - n);
}
/**
* 取得后一页页码。
*
* @return 后一页页码
*/
public int getNextPage() {
return calcPage(page + 1);
}
/**
* 取得后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 < 1) || (page > getPages()) || (page == this.page));
}
/**
* 计算页数,但不改变当前页。
*
* @param page 页码
* @return 返回正确的页码(保证不会出边界)
*/
protected int calcPage(int page) {
int pages = getPages();
if (pages > 0) {
return (page < 1) ? 1 : ((page > pages) ? pages : page);
}
return 0;
}
/**
* 创建复本。
*
* @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 > 0) {
startRow = (itemsPerPage * (page - 1)) + 1;
} else {
startRow = 0;
}
return startRow;
}
/**
* @return the endRow
*/
public int getEndRow() {
if (page > 0) {
endRow = Math.min(itemsPerPage * page, items);
} else {
endRow = 0;
}
return endRow;
}
}
分享到:
相关推荐
这个我人写的一个纯Java版的分页算法,与平台无关性,具有很好的通用性,同时附带完整的工程; 工程使用SQLServer2005,建表脚本在工程下的Setup中,根据你个人的数据库调整资源文件中的配置即可运行;同时这个算法...
java分页算法
算法提取: 0.页码显示规则: 当前页为首页时不显示上一页; 上一页 1 2 3 … 20 下一页 当前页为尾页时不显示下一页; 上一页 1 … 17 18 19 20 下一页 1.页面总数(n) 显示全部页码:上一页 1 2 3 4 5 6 7 8...
----------=====Java 分页算法 =====------------ 1.Struts+JDBC分页算法 1.1 创建分页控制类(如果使用kevinb.jar可以省略本步) --创建接口Pageable.java --创建实现类PageableResultSet.java 使用以这个实现类来...
动态分页算法java代码
Java分页算法以及一点CXF资料 Java分页算法以及一点Apache CXF webservice 资料
非常通用的分页算法java实现,源代码仅供参考
大数据 分页 算法
JAVA 大数据 ecside 分页 算法
java的struts分页算法的具体实现.txt
JAVA+servlet分页处理,JSP分页超级算法和页面,PAGE
首先要定义四个变量: int pageSize:每页显示多少条记录 int pageNow:希望显示第几页 int pageCount:一共有多少页 int rowCount:一共有多少条记录 说明: pageSize是指定的 pageNow是用户选择的 rowCount是计算出来...
在一个请求分页系统中,分别采用最佳置换算法、先进先出置换算法、最近最久未使用置换算法(LRU)时,假如一个作业的页面走向为4、3、2、1、4、3、5、4、3、2、1、5,当分配给该作业的物理块数M分别为3和4时,试计算在...
目的:(1)通过编写程序实现请求分页存储管理页面Optimal、FIFO、LRU调度算法,使学生掌握虚拟存储管理中有关缺页处理方法等内容,巩固有关虚拟存储管理的教学内容。 (2)了解Windows2000/XP中内存管理机制,掌握...
struts分页算法的具体实现方法。
基本分页存储管理全.java
1. 设计目的:用高级语言编写和调试一个内存分配程序,加深对内存分配算法的理解。 2. 设计要求: 1, 实现请求分页存储管理方式的页面置换算法:近期最少使用算法(LFU)。 2, 内存物理块数固定为15个,对多个作业...
带有界面的算法,视自己需求下载。 主界面选择使用三种算法的一个。在创建中输入页面数,随机生成页面。在指定物理块中实现置换。点击查看将置换的过程显示出来。
其中,由系统随机产生进程; 进程大小、进程到达次序、时间、进程...分配算法采用按比例分配算法; 调页采用请求调页方式; 置换分别采用FIFO、LRU 和简单CLOCK 算法; 驻留集大小可调,观察驻留集大小对缺页率的影响。
JSP实现类似百度,google的分页.JSP,仿,google,分页,servlet分页