关于Java的分页算法

问题描述

使用分页类,直接调用就可以,代码如下:packagecom.godwin.news.util;importjava.io.UnsupportedEncodingException;importjava.net.URLDecoder;importjava.util.ArrayList;/***分页类,用于封闭分页显示信息**@authorjavabs**/publicclassPager{//当前页privateintcurrentPage;//总页数privateinttotalPage;//总记录数privateinttotalRecord;//每页条数privateintpageSize;//是否有下一页privateinthasNext;privateArrayListkeys;privateArrayListvalues;//查询串privateStringqueryString;//首页privateStringfirstLink;//上一页privateStringpreviousLink;//下一页privateStringnextLink;//尾页privateStringlastLink;//链接privateStringforScriptLink;publicPager(intpageSize,StringqueryString){keys=newArrayList();values=newArrayList();setQueryString(queryString);setPageSize(pageSize);}publicStringgetForScriptLink(){if(keys.contains("toPage"))removeKey("toPage");Stringtmp=getQueryString();if(tmp.length()==0)return"?";elsereturn"?"+tmp+"&";}publicintgetCurrentPage(){returncurrentPage;}publicvoidsetCurrentPage(StringtoPage){inttmpage=1;try{tmpage=Integer.parseInt(toPage);}catch(NumberFormatExceptione){tmpage=1;}if(tmpage<1)tmpage=1;elseif(tmpage>getTotalPage())tmpage=getTotalPage();currentPage=tmpage;}publicStringgetFirstLink(){returngetQueryStr(1);}publicintgetHasNext(){inti=1;if(getCurrentPage()>=getTotalPage())i=0;returni;}publicStringgetLastLink(){returngetQueryStr(getTotalPage());}publicStringgetNextLink(){returngetQueryStr(currentPage==totalPage?currentPage:(currentPage+1));}publicintgetPageSize(){returnpageSize;}publicvoidsetPageSize(intpageSize){this.pageSize=pageSize;}publicStringgetPreviousLink(){returngetQueryStr(currentPage==1?currentPage:currentPage-1);}publicvoidsetPreviousLink(StringpreviousLink){this.previousLink=previousLink;}publicStringgetQueryString(){StringBuffersb=newStringBuffer();for(inti=0;i<keys.size();i++){Stringkey=(String)keys.get(i);Stringvalue=(String)values.get(i);sb.append("&");sb.append(key);sb.append("=");sb.append(value);}returnsb.delete(0,1).toString();}publicvoidsetQueryString(StringqueryString){if(queryString!=null){Strings[]=queryString.split("&");for(inti=0;i<s.length;i++){Strings1[]=s[i].split("=");if(s1.length==2){keys.add(s1[0]);values.add(s1[1]);}else{keys.add(s1[0]);values.add("");}}}}publicintgetTotalPage(){returntotalPage;}publicvoidsetTotalPage(){if(totalRecord%pageSize==0){totalPage=totalRecord/pageSize;totalPage=totalPage==0?1:totalPage;}elsetotalPage=totalRecord/pageSize+1;}publicintgetTotalRecord(){returntotalRecord;}publicvoidsetTotalRecord(inttotalRecord){this.totalRecord=totalRecord;setTotalPage();}publicString[]getQueryParameterValues(Stringkey){returngetQueryParameterValues(key,"UTF-8");}publicString[]getQueryParameterValues(Stringkey,Stringdecode){ArrayListret=newArrayList();for(inti=0;i<keys.size();i++)if(((String)keys.get(i)).equals(key))try{ret.add(URLDecoder.decode((String)values.get(i),decode));}catch(UnsupportedEncodingExceptione){ret.add((String)values.get(i));}if(ret.size()==0)returnnull;StringstrArr[]=newString[ret.size()];for(inti=0;i<ret.size();i++)strArr[i]=(String)ret.get(i);returnstrArr;}publicStringgetQueryParameter(Stringkey){returngetQueryParameter(key,"UTF-8");}publicStringgetQueryParameter(Stringkey,Stringdecode){Stringvalue="";if(key!="toPage"){try{value=URLDecoder.decode(getValue(key),decode);}catch(UnsupportedEncodingExceptione){value=getValue(key);}}else{inttmpage=1;try{value=getValue(key);tmpage=Integer.parseInt(value);}catch(NumberFormatExceptione){tmpage=1;}catch(NullPointerExceptione1){tmpage=1;}if(tmpage<1)tmpage=1;elseif(tmpage>getTotalPage())tmpage=getTotalPage();value=(newStringBuffer(String.valueOf(tmpage))).toString();}returnvalue;}publicvoidsetQueryParameter(Stringkey,Stringvalue){if(key.equals("toPage"))removeKey(key);keys.add(key);values.add(value);}publicStringgetQueryStr(inttoPage){setQueryParameter("toPage",(newStringBuffer(String.valueOf(toPage))).toString());return"?"+getQueryString();}privateStringgetValue(Stringkey){Stringret="";for(inti=0;i<keys.size();i++){if(!((String)keys.get(i)).equals(key))continue;ret=(String)values.get(i);break;}returnret;}privatevoidremoveKey(Stringkey){for(inti=0;i<keys.size();i++){if(!((String)keys.get(i)).equals(key))continue;keys.remove(i);values.remove(i);break;}}publicstaticvoidmain(Stringargs[]){Stringstr="a=中文aa&b=2&c=3&c=4&c=5";Pagerpage=newPager(2,str);page.setTotalRecord(10);page.setCurrentPage("1");System.out.println(page.getFirstLink());System.out.println(page.getPreviousLink());System.out.println(page.getNextLink());System.out.println(page.getLastLink());Strings=page.getQueryParameter("a");System.out.println("s:"+s);}}

解决方案

解决方案二:
什么情况?
解决方案三:
如果是备忘,请发非技术相关.不需要分.
解决方案四:
引用2楼luozhangwen的回复:

如果是备忘,请发非技术相关.不需要分.

+1
解决方案五:
这是个不错的类,收藏了!谢谢楼主分享!

时间: 2024-11-08 19:20:16

关于Java的分页算法的相关文章

最简单的java分页算法

分页|算法 定义两个Vector,一个为储存查询所有记录的totalV,另一个储存当前页的记录currentPageV;总的记录数:int totalSize = totalV.getSize();每页显示的记录数:int countPerPage;总页数:int totalPageNum = totalSize/countPerPage; //如果总的记录数和每页记录数的余数大于零, //那么总的页数为他们的整除结果加一 if (totalSize%countPerPage > 0 ){ to

ASP的高效率的分页算法

一种高效的SELECT TOP分页算法.代码如下: <%'每页的记录数dim pagesizepagesize= "30" '读出总记录数,总页数,飘易注Dim TotalRecords,TotalPagesSQLstr="Select count(id) As RecordSum From table1" Set Rs=conn.Execute(SQLstr,0,1) TotalRecords=Rs("RecordSum") if Int

SQLSERVER海量数据库的查询优化及分页算法

分页|数据|数据库|算法|优化 探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的"红头文件"一表的部分数据结构: CREATE TABLE [dbo].[TGongwen] (    --TGongwen是红头文件表名    [Gid] [int] IDENTITY (1, 1) NOT NULL ,--本表的id号,也是主键    [title] [varchar] (80) COLLATE Chines

海量数据库的查询优化及分页算法方案

分页|数据|数据库|算法|优化 随着"金盾工程"建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种.各部门.与此同时,应用系统体系的核心.系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,如人口系统的数据甚至超过了1000万条,可谓海量.那么,如何实现快速地从这些超大容量的数据库中提取数据(查询).分析.统计以及提取数据后进行数据分页已成为各地系统管理员和数据库管理员亟待解决的难题. 在以下的文章中,我将以"办公自动化"系

asp.net(C#)海量数据表高效率分页算法(不使用存储过程)

asp.net|存储过程|分页|数据|算法 首先创建一张表(要求ID自动编号):create table redheadedfile(id int identity(1,1),filenames nvarchar(20),senduser nvarchar(20),primary key(id))然后我们写入50万条记录:declare @i intset @i=1while @i<=500000begin    insert into redheadedfile(filenames,sendu

3行代码的分页算法(求起始页和结束页)

  涉及到分页时, 除非只显示上一页/下一页, 否则需要计算起始页和结束页. 看过很多代码都是用大量的if-else来实现, 代码量大, 又不简洁. 现在提供一种只需要3行代码的算法. 一个好的分页算法, 应该具有下面的优点: 当前页码应该尽量在正中间. 如果"首页"和"尾页"不可用(当前处于第一页或最后一页), 不要隐藏这两组文字, 以免链接按钮位置变动. 算法简单. 下面的算法具有前面1和3两个优点. PHP: // $curr_index, 当前页码. //

MS SQL Server数据库查询优化及分页算法

server|分页|数据|数据库|算法|优化 探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的"红头文件"一表的部分数据结构:CREATE TABLE [dbo].[TGongwen] (    --TGongwen是红头文件表名    [Gid] [int] IDENTITY (1, 1) NOT NULL ,--本表的id号,也是主键    [title] [varchar] (80) COLLATE

分页解决方案之分页算法——Pager_SQL的详细使用方法和注意事项

上一次有点匆忙,如何使用介绍的不是太清楚,而且这两天有改掉了几个bug,所以这次呢详细说一下,然后更新一下代码和demo. 源代码和demo的下载:http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html JYK.Controls.Pager.QuickPagerSQL PagerSQL = new QuickPagerSQL(); //设置保存属性的位置.可以不保存,也可以保存在隐藏域.Cookie.Session等地方.默认保存在隐

分页解决方案之分页算法——Pager_SQL的思路和使用方法

分页算法(也就是分页读取数据的时候使用的select 语句)面临两大难题:一个是不同的数据库使用的分页算法是不一样的(比如SQL Server 2000可以使用Max.表变量.颠倒Top,SQL Server 2005可以使用Row_Number,MySql可以使用limit ,Orcale可以使用ROWNUM等):另一个是,不同的分页需求,可以采用的分页算法也是不一样的(比如单字段排序和多字段排序).那么我们应该如何来选择呢? 好多人都想找到一种即通用,效率又高的分页算法,那么能不能找到呢?我