我想知道如何确定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
此订单或输出的解释是什么?
答案 0 :(得分:6)
HashSet基于数组。数组中的项目索引是基于hashCode()
函数计算的。
HashSet中的Iterator移动数组元素,跳过null元素。这就是为什么您的订单“奇怪”的原因。如果您需要保留广告订单,请使用LinkedHashSet
。
答案 1 :(得分:1)
您必须为订购付费(在大多数情况下以计算时间的形式)。 documentation明确指出, [...]。它不能保证集合的迭代顺序;特别是,它并不保证订单会随着时间的推移保持不变。因此,我认为为了履行起见,订单会被忽视。