LinkedHashSet 底层说明:
1、LinkedHashSet 是HashSet的子类。以下类图可以说明,当然自己可以追进源码看实际的关系。
2、LinkedHashSet底层是一个LinkedHashMap,底层维护了一个 table数组 + 双向链表。
2.1值得注意的是table 表是Node 类型的,而存入的数据类型却是Entry类型的。这是因为在底层当中,Entry 继承了 Node 类,所以可以这样写。
3、LinkedHashSet 根据元素的hashCode 计算出hash值来决定在table表中的位置,同时使用双向链表维护了元素的次序,使得元素看起来是以插入的顺序保存。
4、LinkedHashSet 由于是继承HashSet 所以跟HashSet 一样的扩容机制与添加机制,只是在这基础上加了双向链表,连接各元素使得他们有顺序。
其中的双向链表实现原理
1、table表中存入的Entry类型的元素,每个元素有 有before 和 after 两个关键字,相当于前驱和后继的意思。而LinkedHashMap中的head 和 tail 则分别表示链表当中的第一个元素和最后一个元素。
2、具体添加元素的过程跟HashSet 一样,这里就不多说了,当你添加进去一个元素后,这个head就指向了这个元素,这个元素的after 和 before 暂时为空。
当第二个元素添加成功后,第一个元素的before 为空,after 则指向了第二个元素。第二个元素的before指向了第一个元素,after 为空,这样一来就形成了双向链表的形式。而此时的tail 则指向了第二个元素。
附:该篇文章仅用于记录所学知识,如有误导敬请海涵!