繁体   English   中英

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

[英]Why are elements in HashSet in random order?

我想知道如何确定 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

这个命令或输出的解释是什么?

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

HashSet 中的迭代器在数组元素上移动,跳过空元素。 这就是为什么您的订单是“奇怪的”。 如果您需要保留插入顺序,请使用LinkedHashSet

您必须为订购付费(在大多数情况下以计算时间的形式)。 并且文档明确指出,“ [...]。它不保证集合的迭代顺序;特别是,它不保证顺序会随着时间的推移保持不变。

因此,我认为为了性能而忽略了该顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM