HashSet的排序问题

DryKillLogic 2010-10-26 04:24:35
HashSet中是无顺序的,这是毋庸置疑的,但是今天发现如果向HashSet中放入基本类型int,打印却有顺序,查了一些资料,还是不太理解,望大家帮忙!

Set set = new HashSet();
set.add("A");
set.add("B");
set.add("C");
set.add("D");
set.add("E");
System.out.println("String set : " + set);

Set set2 = new HashSet();
set2.add(1);
set2.add(2);
set2.add(3);
set2.add(4);
set2.add(5);
System.out.println("int set : " + set2);


输出:

String set : [D, E, A, B, C]
int set : [1, 2, 3, 4, 5]



...全文
911 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
DryKillLogic 2010-10-27
  • 打赏
  • 举报
回复
感谢大家,结贴了
贪睡的兔子 2010-10-26
  • 打赏
  • 举报
回复
数据结构那看来的,不知道对不对
hashcode相同,equals不一定相同
存入散列本来就是为了节约空间,假如有10个散列桶,可能计算散列值的算法插入6个桶,第七个可能就重复了,
当你插入数少的时候,都处于不同的桶,用hashcode就可能会按顺序
DryKillLogic 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 closewbq 的回复:]

多添点- -!
Set set = new HashSet();
for(int i=0;i<100;i++){
set.add(i);
}
System.out.println(set);
[/Quote]
果然。。。。。
closewbq 2010-10-26
  • 打赏
  • 举报
回复
多添点- -!
Set set = new HashSet();
for(int i=0;i<100;i++){
set.add(i);
}
System.out.println(set);
hanRivergo 2010-10-26
  • 打赏
  • 举报
回复
这种有序可能是没有保证的,只有这样去理解。
DryKillLogic 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 houjin_cn 的回复:]

纯属巧合: set2.add(16); 你就会发现顺序不对了,
[/Quote]

没有啊,顺序依然对呀,好像它是按照这样的排序规则:对象值-->哈希码-->元素位置
pywepe 2010-10-26
  • 打赏
  • 举报
回复

不保证数据是有顺序的
zdjray 2010-10-26
  • 打赏
  • 举报
回复
这你就需要看源码是怎么实现的了
houjin_cn 2010-10-26
  • 打赏
  • 举报
回复
纯属巧合: set2.add(16); 你就会发现顺序不对了,
keeya0416 2010-10-26
  • 打赏
  • 举报
回复
............
我这里是无序的
你JDK是哪个版本的

62,616

社区成员

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

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