把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());
}
}
}

解决方案 »

  1.   

    只是说元素不重复而已,hashset的无序是指插入的地方我们不能控制,因为它的底层是数组根据算法来插入的,这个算法是固定的,所以每次打印出来当然是一样的啦
      

  2.   

    应该说HashSet是无序的,但是你往里面放入数据的规律是一样的(根据hashCode%hash桶数,而决定将该元素放到哪个桶中)