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

时间:2015-06-05 16:17:56

标签: 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());
    }

我得到了这个结果

June
October
December
September
May
March
Novermber
July
January
February
April
August

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

您必须为订购付费(在大多数情况下以计算时间的形式)。 documentation明确指出, [...]。它不能保证集合的迭代顺序;特别是,它并不保证订单会随着时间的推移保持不变。因此,我认为为了履行起见,订单会被忽视。