我想知道以哪种方式在HashSet中检索数据 我以不同的顺序插入了数据,而输出数据则以另一个顺序。 有人可以告诉我背后的逻辑吗?
代码是这样的:-
class Test
{
public static void main(String[]args)
{
HashSet<String> h = new HashSet<String>();
// Adding elements into HashSet using add()
h.add("India");
h.add("Australia");
h.add("South Africa");
System.out.println(h);
}
}
产出:-[南非,澳大利亚,印度]
答案 0 :(得分:3)
来自HashSet的Javadoc
它不保证 集的迭代顺序;特别是,它不能保证 顺序将随时间保持不变。
答案 1 :(得分:0)
HashSet与具有Value的HashMap相同。此外,它在内部使用带有值常量对象HashMap的“ PRESENT”。通过执行此HashSet保证唯一性,但不能保证顺序它与Hashmap相似地定位set元素。
您可以在Internet上看到HashSet的实现。
答案 2 :(得分:0)
如前所述,不能保证HashSet中元素的顺序是任何东西,也不保证其随时间恒定。
这是由于基础数据结构的性质所致。
在您的情况下,字符串似乎存储在LIFO队列中,但是HashSet的另一种实现可能会做不同的事情(甚至当插入更多项时,它的行为也可能会有所不同)。
答案 3 :(得分:0)
如上所述,请参阅HashSets的Javadoc-不保证顺序。 https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html
答案 4 :(得分:0)
如果希望LinkedHashSet保持元素顺序,请使用它。