美文网首页源码分析
集合17-LinkedHashMap(1.8)源码分析

集合17-LinkedHashMap(1.8)源码分析

作者: zhanglbjames | 来源:发表于2017-06-11 20:52 被阅读0次

LinkedHashMap继承自HashMap,除了具有HashMap的功能之外,还维持了一个双向链表用来按照插入或访问的顺序记录所有Entry。

1- LinkedHashMap继承结构



LikedHashMap继承自HashMap,通过重写HashMap中的多个方法来实现对LikedHashMap中双向链表的插入和删除,从而保证能按照元素插入或者访问顺序迭代所有元素。

2- 构造函数




accessOrder默认为false,即为插入顺序,另外还需要提供initialCapacity、loadFactor用来初始化HashMap,当然不指定则使用默认值。

3- 顺序遍历的实现

最后插入或者最后访问的节点位于双向链表的尾部。

1. 双向链表节点
保存双向链表的head和tail节点
继承自HashMap.Node,双向链表节点。
双向链表的尾部添加

双向链表的取代已存节点的操作


2. 重写HashMap中钩子方法来实现顺序迭代

普通节点的插入和替代


树节点的插入和替代


删除

访问顺序的支持

afterNodeAccess(需要注意:将访问的节点移动到链表的尾部


重写get方法以支持访问顺序

LRU(删除最近最少使用)缓存更新策略场景的支持


HashMapput方法会将evict参数设置为true;removeEldestEntry方法默认返回false,如果要实现LRU则需根据业务场景重写此方法

4- 顺序迭代器

基于LikedHashMap的双向链表的迭代器实现,实现比较简单

5- 利用LinkedHashMap实现LRU的简单例子

继承LinkedHashMap然后重写removeEldestEntry方法



测试main函数



输出结果

相关文章

网友评论

    本文标题:集合17-LinkedHashMap(1.8)源码分析

    本文链接:https://www.haomeiwen.com/subject/ibcfqxtx.html