Iterator是怎么排序的?怎出这样的怪问题

maplenet 2008-11-25 11:52:56
import java.util.*;
class SetDemo{
public static void main(String[] args){
Set s =new HashSet();
String a=new String("A");
String b=new String("B");
String c=new String("D");
s.add(a);
s.add(b);
s.add(c);
Iterator it=s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
结果:DAB
import java.util.*;
class SetDemo{
public static void main(String[] args){
Set s =new HashSet();
String a=new String("A");
String b=new String("B");
String c=new String("C");
s.add(a);
s.add(b);
s.add(c);
Iterator it=s.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
结果:ABC
...全文
1434 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxxzhy 2008-11-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 songyun870 的回复:]
没有顺序..你加入的顺序就是顺序....
[/Quote]
不对.
冰思雨 2008-11-25
  • 打赏
  • 举报
回复
HashSet中的元素是无序的,不重复的。
TreeSet中的元素是按照元素对象compare方法的返回值排序的,不重复的。
LinkedHashSet可以设置按照你访问元素的顺序排序,里面的元素仍然是不重复的。
yulu0214 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 myjava_024 的回复:]
因为是hashset默认不像list那样怎么输入怎么输出

这样输出可能是按hashcode大小

如果需要排序则可以通过Comparable,Comparator完成

TreeSet应该是默认输出时排序的

另外:
LinkedHashSet 它保存了对象放入Set的顺序,HashSet是根据HashCode与equals()方法来决定放入的对象是否是同一个对象,同时也是
根据HashCode排序的,这时的排序称之为自然排序(当然由于HashCode每次都可能不同,所以每次的排序也可能都不同)…
[/Quote]
同意
qap22 2008-11-25
  • 打赏
  • 举报
回复
mark
myjava_024 2008-11-25
  • 打赏
  • 举报
回复
因为是hashset默认不像list那样怎么输入怎么输出

这样输出可能是按hashcode大小

如果需要排序则可以通过Comparable,Comparator完成

TreeSet应该是默认输出时排序的

另外:
LinkedHashSet 它保存了对象放入Set的顺序,HashSet是根据HashCode与equals()方法来决定放入的对象是否是同一个对象,同时也是
根据HashCode排序的,这时的排序称之为自然排序(当然由于HashCode每次都可能不同,所以每次的排序也可能都不同)你可以自己将放入该容器的类实现Comparable或者在调用Collections.sort()时传递一个实现了Comparator接口的对象,这时就是你自定义的排序了~而TreeSet不是默认输出,它内部是排序的,所以它要求放入该容器的类都实现Comparable或者在创建TreeSet对象时传递一个实现了Comparator接口的对象。具体可以看看API,呵呵~
dreamhunter_lan 2008-11-25
  • 打赏
  • 举报
回复
不是怪在Iterator,而是怪在HashSet,Set是没有顺序的
「已注销」 2008-11-25
  • 打赏
  • 举报
回复
学习了!
yulu0214 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 myjava_024 的回复:]
因为是hashset默认不像list那样怎么输入怎么输出

这样输出可能是按hashcode大小

如果需要排序则可以通过Comparable,Comparator完成

TreeSet应该是默认输出时排序的

另外:
LinkedHashSet 它保存了对象放入Set的顺序,HashSet是根据HashCode与equals()方法来决定放入的对象是否是同一个对象,同时也是
根据HashCode排序的,这时的排序称之为自然排序(当然由于HashCode每次都可能不同,所以每次的排序也可能都不同)…
[/Quote]
利用 hashcode来查找 ,所以 查询 速度 超快。不过 现在 好像 也 有 牌序 的 了 ,set我 不 知道 有 没 有 ,LinkedHashMap是 可以 记住 你 插入 的 顺序 的 ,楼主 自己 可以 查 一下
hoslay 2008-11-25
  • 打赏
  • 举报
回复
的确是无序的,不过你实现了排序用的接口就另当别论了
weizhao_2008 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 weizhao_2008 的回复:]
引用 2 楼 myjava_024 的回复:
因为是hashset默认不像list那样怎么输入怎么输出

这样输出可能是按hashcode大小

如果需要排序则可以通过Comparable,Comparator完成

TreeSet应该是默认输出时排序的

另外:
LinkedHashSet 它保存了对象放入Set的顺序,HashSet是根据HashCode与equals()方法来决定放入的对象是否是同一个对象,同时也是
根据HashCode排序的,这时的排序称之为自然排序(当然由于HashCode每次都可…
[/Quote]
另外补充,Iterator只是起遍历的作用,不是排序
weizhao_2008 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 myjava_024 的回复:]
因为是hashset默认不像list那样怎么输入怎么输出

这样输出可能是按hashcode大小

如果需要排序则可以通过Comparable,Comparator完成

TreeSet应该是默认输出时排序的

另外:
LinkedHashSet 它保存了对象放入Set的顺序,HashSet是根据HashCode与equals()方法来决定放入的对象是否是同一个对象,同时也是
根据HashCode排序的,这时的排序称之为自然排序(当然由于HashCode每次都可能不同,所以每次的排序也可能都…
[/Quote]
讲的很详细了
dahaizisheng 2008-11-25
  • 打赏
  • 举报
回复
恩,HashSet的源码中实现就是采用一种无序算法的
和加入的顺序有关系
但是加入的顺序不能决定输出时的顺序。

即输出的顺序不是由加入输出决定,即无法判定会以什么样子的方式输出
songyun870 2008-11-25
  • 打赏
  • 举报
回复
没有顺序..你加入的顺序就是顺序....
shenjie1989 2008-11-25
  • 打赏
  • 举报
回复
HashSet中的元素是无序的,不重复的。
TreeSet中的元素是按照元素对象compare方法的返回值排序的,不重复的。
LinkedHashSet可以设置按照你访问元素的顺序排序,里面的元素仍然是不重复的。

62,635

社区成员

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

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