把ArrayList中的54个值随机放入了HashSet中,为何多次编译执行时HashSet迭代取值顺序固定?set不是无序的么?
- Java code
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()); } }}
------解决方案--------------------
只是说元素不重复而已,hashset的无序是指插入的地方我们不能控制,因为它的底层是数组根据算法来插入的,这个算法是固定的,所以每次打印出来当然是一样的啦
------解决方案--------------------
应该说HashSet是无序的,但是你往里面放入数据的规律是一样的(根据hashCode%hash桶数,而决定将该元素放到哪个桶中)