Set只能用iterator遍历吗?有没有别的办法,在线等~

yqsshr 2009-08-11 08:59:05
因为用到分页,所以不能用iterator遍历了。我想这样但是不行

for(int i = startPos; i < (startPos + pm.getPageSize()) ; i++) {
try {
ri = (ResourceItemBean)resultSet.get(i); //取得第(i)个TreeSet
} catch(IndexOutOfBoundsException e) { //到达resultSet末尾需处理
i--;
break;
}

因为Set(TreeSet)没有get(i)方法。。所以不能实现遍历,谁有好的方法吗?用iterator能解决吗?
...全文
1293 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
建议楼主使用分页的 SQL 语句,显示多少数据就到数据表中取多少数据,一点都不浪费。

分页的 SQL 语句各数据库都不一样。

Oracle:可以采用伪列 rownum,或者是窗口函数 row_number()
MS SQL Server:使用 TOP 查询。2005 版本及以上还能使用窗口函数 row_number()
DB2:使用 row_number() 窗口函数
MySQL/PostgreSQL:使用 LIMIT 子句

具体的用法可以到网上找到
  • 打赏
  • 举报
回复
分页不是这样写的,没人会把数据全部取出来然后再找一小部分的。

1000 条以内的数据也许影响不大,这样想想看,如果数据表中的数据是上万、几十万、
上千万、上亿的记录,这样做能行么?
yqsshr 2009-08-15
  • 打赏
  • 举报
回复
再请教大侠:
怎么样在Java程序或socket或者rmi里去执行某个Servlet啊
例如可以这样吗:

public class ConnServlet {
public static void main(String[] args) {
//调用servlet查询
try {
InetAddress address = InetAddress.getLocalHost();
String localhost = address.getHostAddress();
URL url = new URL("http://" + localhost + ":8080/PSP_Search/servlet/query");
url.openConnection();

System.out.println("连接成功");
} catch(UnknownHostException e) {
System.out.println("找不到主机");
e.printStackTrace();
} catch(MalformedURLException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
}

这样能不能执行http://localhost:8080/PSP_Search/servlet/query这个Servlet呢?
yqsshr 2009-08-15
  • 打赏
  • 举报
回复
对了,,我用一种很奇怪的方法竟然实现了分页功能了。。哈哈,我把取得的JavaBean数据全部放到session里,然后分页链接的时候一页一页的取就是了。。虽然在项目中不实际,但能实现这个功能了。oo
yqsshr 2009-08-15
  • 打赏
  • 举报
回复
谢谢“火龙果”大侠,在做一个学习型的小屁项目,因为数据时从JavaBean里取得,不大,所以没考虑那么多了。只想着实现功能。
感觉这个帖子不错,先不结贴了。让多些人来看看。呵呵
ThirstyCrow 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yqsshr 的回复:]
噢,谢谢楼上各位。。那有没有办法让ArrayList里面的值(JavaBean)不会重复呢?要写专门的方法判断吗,那样效率太差了。。
[/Quote]

List list = ...;
Set set= new LinkedHashSet(list);
list.clear();
list.addAll(set);

yqsshr 2009-08-14
  • 打赏
  • 举报
回复
噢,谢了。
好吃的松子 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yqsshr 的回复:]
噢,谢谢楼上各位。。那有没有办法让ArrayList里面的值(JavaBean)不会重复呢?要写专门的方法判断吗,那样效率太差了。。
[/Quote]

如果是从数据库取的话,distinct一下,其他方式的就先判断下list.contains(bean),bean中要重载equals方法
yqsshr 2009-08-14
  • 打赏
  • 举报
回复
噢,谢谢楼上各位。。那有没有办法让ArrayList里面的值(JavaBean)不会重复呢?要写专门的方法判断吗,那样效率太差了。。
好吃的松子 2009-08-14
  • 打赏
  • 举报
回复
刚试了下,发现iterator虽然是乱序的,但是每次遍历的顺序都是一样的,所以如果你一定要用Set保存数据的话,可以使用toArray后再使用arr[i]来实现你的需求
好吃的松子 2009-08-14
  • 打赏
  • 举报
回复
很奇怪的需求!
如果你要用Set来保存结果集的话,那就没有分页可言了,因为正如2楼所说Set是无序的,如果你想要全部拿出后分页那还是用List吧

另外,toArray()可以啊,数据中可以存放任何类型的对象啊,不过我刚查了下源码,toArray()也是用iterator()方法遍历生成的,所以,,,呵呵
yqsshr 2009-08-14
  • 打赏
  • 举报
回复
谢谢楼上各位解答。。还没找到解决办法,有会的多多赐教啊。。
snle001 2009-08-13
  • 打赏
  • 举报
回复

TreeSet<String> set = new TreeSet<String>();
set.add("1");
set.add("2");
set.add("3");
for(String str : set){
System.out.println(str);
}

楼主的意思是这样吗?
晴天v1 2009-08-13
  • 打赏
  • 举报
回复
没太明白您的意思。
yqsshr 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bao110908 的回复:]
你不会先把数据全部取出来,然后再操作的吧?
[/Quote]
嗯,我就是这样的。。
monkeyking1987 2009-08-12
  • 打赏
  • 举报
回复
写一个比较器,试试
  • 打赏
  • 举报
回复
你不会先把数据全部取出来,然后再操作的吧?
yqsshr 2009-08-11
  • 打赏
  • 举报
回复
2楼的set.toArray()不可行吧,JavaBean转化为数组?
我用TreeSet而不用ArrayList是因为可能存在相同的JavaBean对象,3楼的办法我试试
bayougeng 2009-08-11
  • 打赏
  • 举报
回复
get(i)是建立在有序的基础上的。
集合中的元素,是没有顺序可言的。它的特点是没有重复的元素。
如果你想用set方法来遍历,可以自己写个类继承TreeSet,并同时实现List接口。
用你自己的类来保存元素,就可以用get(i)遍历了。
紫炎圣骑 2009-08-11
  • 打赏
  • 举报
回复
用set.toArray() 方法转变成数组

然后进行遍历。
加载更多回复(1)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧