HashSet 迭代取值时顺序固定

a1244323320 2012-06-07 11:08:25
把ArrayList中的54个值随机放入了HashSet中,为何多次编译执行时HashSet迭代取值顺序固定?set不是无序的么?

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;

public class HashSetDemo {
public static void main(String[] args) {
ArrayList<Integer> al=new ArrayList<Integer>();
for (int i = 0; i < 54; i++) {
al.add(i);
}



HashSet<Integer> hs=new HashSet<Integer>();
Random rd=new Random();
for (int i = 0; i < 54;) {
int k=rd.nextInt(54);

if(hs.contains(al.get(k))){
continue;
}
hs.add(al.get(k));

i++;
}



Iterator<Integer> it=hs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
...全文
551 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
淡定的峰哥 2012-06-07
  • 打赏
  • 举报
回复
应该说HashSet是无序的,但是你往里面放入数据的规律是一样的(根据hashCode%hash桶数,而决定将该元素放到哪个桶中)
jlu_lamp_lamp 2012-06-07
  • 打赏
  • 举报
回复
只是说元素不重复而已,hashset的无序是指插入的地方我们不能控制,因为它的底层是数组根据算法来插入的,这个算法是固定的,所以每次打印出来当然是一样的啦

62,621

社区成员

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

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