关注
1.概述
使用HashMap的时候会遇到需要按照当时put的顺序来进行哈希表的遍历。但是HashMap中不存在保存顺序的机制。
LinkedHashMap专为此特性而生。LinkedHashMap中可以保持两种顺序,分别是插入顺序和访问顺序。相对于访问顺序,按照插入顺序进行编排被使用到的场景更多一些,所以默认是按照插入顺序进行编排。
2.原理
①LinkedHashMap通过双向链表的结构来维护节点的顺序的。每个节点都进行了双向的连接,维持插入的顺序。head指向第一个插入的节点,tail指向最后一个节点。
②LinkedHashMap是HashMap的亲儿子,直接继承HashMap类。LinkedHashMap中的节点元素为Entry<K,V>,直接继承HashMap.Node<K,V>。
3.分析
3.1 节点构造方法
LinkedHashMap继承HashMap,在HashMap类的put方法中,新建节点是使用的newNode方法。而在LinkedHashMap没有重写父类的put方法,而是重写了newNode方法来构建自己的节点对象。
3.2 put方法
在LinkedHashMap类使用的仍然是父类HashMap的put方法,所以插入节点对象的流程基本一致。不同的是,LinkedHashMap重写了afterNodeInsertion和afterNodeAccess方法。
afterNodeInsertion方法用于移除链表中的最旧的节点对象,也就是链表头部的对象。实现的逻辑,是把入参的节点放置在链表的尾部。
3.3 get方法
LinkedHashMap中的get方法与父类HashMap处理逻辑相似,不同之处在于增加了一处链表更新的逻辑。如果LinkedHashMap中存在要寻找的节点,那么判断如果设置了accessOrder,则在返回值之前,将该节点移动到对应桶中链表的尾部。
3.4 remove方法
LinkedHashMap重写了afterNodeRemoval方法,用于在删除节点的时候,调整双链表的结构。
4.小结
LinkedHashMap相对于HashMap,增加了双链表的结果(即节点中增加了前后指针),其他处理逻辑与HashMap一致,同样也没有锁保护,多线程使用存在风险。
查看原帖
1 评论
相关推荐
牛客热帖
更多
- 1... 26国考公告出炉,放宽到38岁意味着什么5038
- 2... 京东官宣发布新车,会有新的HC吗?4353
- 3... 害,找工作哪有不上当的!4329
- 4... 《从研一摆烂到稳拿oc:嵌入式er的踩坑血泪史,这些弯路真的别再走了!》4301
- 5... 懂车帝二面 2025.10.11 1h32min3550
- 6... 牛牛求救🆘,不敢梭哈后端第二技能点怎么搭配3100
- 7... 下一站回家2741
- 8... 27届速通第一段前端实习后续--节孝子启动!2635
- 9... 双非秋招timeline供参考(腾讯字节阿里快手美团)2536
- 10... 找到靠谱的公司,少走些弯路2367
正在热议
更多
# 找工作中的小确幸 #
7199次浏览 73人参与
# 秋招踩过的“雷”,希望你别再踩 #
14396次浏览 167人参与
# 爱玛科技集团求职进展汇总 #
29543次浏览 208人参与
# 面包vs爱情,怎么选? #
15588次浏览 167人参与
# 实习在多还是在精 #
1885次浏览 35人参与
# 发面经攒人品 #
2327216次浏览 32435人参与
# 深信服秋招来了 #
280439次浏览 2917人参与
# 实习下班不想学习,正常吗? #
2712次浏览 43人参与
# 反问环节如何提问 #
106607次浏览 2001人参与
# 机械求职避坑tips #
67069次浏览 449人参与
# 校招谈薪一定要知道的事 #
1929次浏览 33人参与
# 你觉得什么岗位会被AI替代 #
3819次浏览 74人参与
# 贝壳求职进展汇总 #
35819次浏览 199人参与
# 机械人值得去的小众企业 #
24090次浏览 54人参与
# 秋招结束之后的日子 #
87948次浏览 985人参与
# 浪潮求职进展汇总 #
17686次浏览 137人参与
# 投格力的你,拿到offer了吗? #
118899次浏览 686人参与
# 诺瓦星云求职进展汇总 #
219669次浏览 1715人参与
# 新凯来求职进展汇总 #
51777次浏览 131人参与
# Offer比较,你最看重什么? #
216303次浏览 1394人参与
# 职场新人体验 #
86641次浏览 611人参与
# 实习教会我的事 #
31613次浏览 274人参与