为什么HashSet中的元素是随机顺序的?

Kab*_*hok 1 java

我想知道如何确定HashSet中元素的位置.它是通过一些内置的哈希函数吗?

Set <String>set=new HashSet<String>();
    set.add("January");
    set.add("February");
    set.add("July");
    set.add("August");
    set.add("September");
    set.add("October");
    set.add("Novermber");
    set.add("December");
    set.add("March");
    set.add("April");
    set.add("May");
    set.add("June");


    Iterator <String>it=set.iterator();
    while(it.hasNext()){
        System.out.println(it.next());
    }
Run Code Online (Sandbox Code Playgroud)

我得到了这个结果

June
October
December
September
May
March
Novermber
July
January
February
April
August
Run Code Online (Sandbox Code Playgroud)

这个订单或输出的解释是什么?

Ada*_*ker 6

HashSet基于数组.数组中的项目索引是基于hashCode()函数计算的.

HashSet中的Iterator移动数组元素,跳过null元素.这就是为什么你的订单是"奇怪的".如果您需要保留广告订单,请使用LinkedHashSet.