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 源码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器