高手们 怎么对map里的值进行分页?
[code="java"]
set = cardMap.entrySet(); List list = new ArrayList(); //保存set集合到list里,之后就直接操作list就好了 list.addAll(set); //下面就直接写了,访问list int totalPage=0; //总页数 int count = cardMap.size(); //总行数 if(count%5邮箱: | ')"> 分机: |
[/code]
能不能描述的详细一点?
看你想要什么效果了,具体说说你想要的效果
hashmap里面是以hashcode排列的,你要想按你的顺序分页,感觉用map就没大意义了,如果是想模拟分页的效果用还行。
你这是把数据都放在内存中的Map里?
来个内存分页的?
lz看这样是不是可行:
初始化时,用一些map存储那1000条记录(如1页10条,那就一个map存10条)
然后把这些map存在list中
那么list的索引号就是map的页数了啊
你的记录怎么会放到map里,应该是放在list里吧,map是key-value,你的key是干什么用的
如果是list,那很好定位数据的位置,用E get(int index)返回列表中指定位置的元素。
刚才看错了
原来lz的map中的每一个元素 都只有这么一点内容
那么直接用List好了啊
lz可以将每一个元素的key和values封装成一个对象
其实实际上你分页操作的对象是Map.Entry
也就是Set集合cardMap.entrySet()中的数据,你应该把set转换成list,那就很方便了,
还有,为了避免每次都调用cardMap.entrySet()得到数据集合,你应该提供一个api来得到cardMap.entrySet(),而且只调用一次,以后就一直用就行了
针对list的分页就很简单了
[color=indigo]可以分页倒是可以分页,举个简单的方法,你可以写个类继承hashmap啊,然后写个方法不就好了,但是这样做其实没有大意义,每次取的数据都是从hashmap里去,都是通过hashcode和id去找,虽然能做出效果,但是性能问题值得考究。
但是正如楼上说的那样,正常的分页思路应该是,你想取前10条,就查询到10就可以了,如果想去10-20条就直接取10-20,这样不用像从map里,每次都得按hash算法算下,看里面是否有这个元素,然后再取了[/color]
[code="java"]
set = cardMap.entrySet(); List list = new ArrayList(); //保存set集合到list里,之后就直接操作list就好了 list.addAll(set); //下面就直接写了,访问list int totalPage=0; //总页数 int count = cardMap.size(); //总行数 if(count%5邮箱: | ')"> 分机: |
[/code]
不管你的value是什么,list里存放的就是Map.Entry,
这与遍历map中的Map.Entry是一样的效果,
list遍历数据是最快的,所以就解决了性能问题和遍历问题
我已经给你完整实现了这个页面,
和你之前的唯一不同的就是改成list而已,不就这样嘛