当前位置: 代码迷 >> J2SE >> HashSet 迭代取值时顺序固定解决方案
  详细解决方案

HashSet 迭代取值时顺序固定解决方案

热度:369   发布时间:2016-04-24 00:50:50.0
HashSet 迭代取值时顺序固定
把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桶数,而决定将该元素放到哪个桶中)
  相关解决方案