LinkedHashMap 源码
2021/9/4 9:08:32
本文主要是介绍LinkedHashMap 源码,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
LinkedHashMap
LinkedHashMap是一个有序的HashMap,它继承了HashMap, 其顺序有两种:按照访问的顺序和按照存储的顺序。顺序是由accessOrder字段控制,若accessOrder=true则说明是按照访问的顺序。若accessOrder=false则说明是按照存储的顺序。
其底层的数据结构是 HashMap+双向链表。如图所示:
LinkedHashMap的大部分方法都是采用HashMap的方法,比如put,remove等,我们接下来只说有关双向链表的部分
LinkedHashMap.Entry
LinkedHashMap的最底层Node是LinkedHashMap.Entry,他继承了HashMap.Node,同时具有两个新的指针before和after来构成双向链表
也就是说LinkedHashMap.Entry共有三个指针before,after和来自HashMap.Node的next
head和tail
LinkedHashMap存储了双向链表的head 和 tail
put方法
put方法调用的是hashmap的put方法
关键在于LinkedHashMap重写了newNode方法,在newNode中完成了put时的 在双向链表的结尾添加节点
在put完成后,又执行了afterNodeInsertion方法:
这个方法在HashMap中为空方法,在LinkedHashMap中重写了它
一般情况下,这个方法不会执行任何操作!因为removeEldestEntry的返回结果默认为false,他是让我们用来扩展的,我们可以重写它使得满足一定条件下移除队首节点(可以用它来实现LRU)
get
LinkedHashMap重写了get方法
如果顺序是访问顺序的话,get后会将get的节点放在链表的尾部
remove
remove同put一样调用的是HashMap的方法,只不过多一个afterNodeRemoval,调整双向链表中节点的顺序
这篇关于LinkedHashMap 源码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API