Java基础_LinkedHashMap源码分析

2020-03-06  本文已影响0人  dashingqi

本文主要从如下几点学习LinkedHashMap

LinkedHashMap是啥

代码实操

原理分析

几个全局变量的解释

transient LinkedHashMapEntry<K,V> head;
transient LinkedHashMapEntry<K,V> tail;
final boolean accessOrder;

LinkedHashMapEntry的介绍

LinkedHashMap的构造函数介绍

putI()方法的源码的分析

LinkedHashMap中没有重写put方法,但是在HashMap进行put操作的时候,有如下两点判断

还有一个方法,afterNodeInsertion(evict)

newNode()方法内部调用了linkNodeLast(p);方法。
afterNodeAccess(e)方法分析
afterNodeInsertion方法分析

get()方法的源码分析

LinkedHashMap重写了HashMap的get方法

LinkedHashMap的删除操作

LinkedHashMap没有重写remove方法,

我们知道remove方法内部调用了removeNode()方法,removeNode方法内部调用了afterNodeRemoval()

LinkedHashMap内对afterNodeRemoval()方法进行重写

LinkedHashMap的containsValue()

相比较于HashMap

图的形式展示双向列表

上面讲的又是节点,又是前置节点,又是后置节点

然后什么accessOrder == true的时候,又要移动节点,又要更新前置和后置的引用

下面就以一张图表示一下。

LinkedHashMap_put_get_操作示意图.png
上一篇下一篇

猜你喜欢

热点阅读