Java LinkedHashSet 底层原理详见

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 则指向了第二个元素。

附:该篇文章仅用于记录所学知识,如有误导敬请海涵!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值