![](/img/trans.png)
[英]Why the order of elements in HashSet's keySet changes from run to run?
[英]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.