我的疑问是,为什么在“ B”和“ C”之间插入“ a”。
TreeSet对条目进行排序。
linkedHashSet保留插入顺序。
HashSet不保留插入顺序,也不对条目进行排序/排序。这意味着,当您遍历集合时,将按难以理解的顺序返回条目,并且没有实际意义。此时没有
"a"插入任何特定的“原因”
。事实就是如此……给定了一组输入键及其插入顺序。
我唯一的疑问是,哈希集如何在Java中工作。
它实现了一个哈希表。阅读哈希表上的Wikipedia页面,以获取一般概述以及的源代码
java.util.HashMap和
java.util.HashSet详细信息。
简短的回答是,
HashSet和
HashMap均作为哈希链阵列实现的哈希表。
而且我知道,linkedHashset遵循双重链表。如果它使用双向链表,那么它将如何存储元素?
linkedHashSet本质上是一个带有附加链表的哈希表,该链表记录了插入顺序。元素存储在主哈希表中……这就是提供快速查找的功能。同样,请参阅源代码以获取详细信息。
双向链表是什么意思,它是如何工作的?
阅读Wikipedia中的双向链接列表中的文章。
那么在Java中将使用这三个Hashset,Treeset,linkedhashset的情况,哪个在Java中具有更好的性能呢?
在这三个类别(和其他类别)之间进行选择时,有很多事情要考虑:
他们是否提供所需的功能。例如,我们已经看到它们在迭代顺序方面有 不同的 行为。
它们是否具有必需的并发属性?例如,它们是线程安全的吗?他们处理争执吗?他们允许并发修改吗?
他们需要多少空间?
性能(时间)特征是什么?
关于最后两点?
A
TreeSet
使用最少的空间,而AlinkedHashSet
使用最多的空间。甲
HashSet
趋于为最快的查找,插入和删除较大套,以及TreeSet
往往是最慢的。



