linkedhashmap 排序_JDK1.8 util-LinkedHashMap源码分析

本文深入剖析LinkedHashMap,它继承HashMap并维护双向链表,保证遍历顺序。通过分析构造方法、get()、put()、remove()以及迭代器,揭示其内部工作原理,尤其在访问顺序排序上的实现。LinkedHashMap适用于实现LRU缓存等场景。
摘要由CSDN通过智能技术生成

fa72f89ca37df958b27d1057e816f234.png

1概述

LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。所以,要看懂 LinkedHashMap 的源码,需要先看懂 HashMap 的源码。

2.1 LinkedHashMap的数据结构

781e2af54d152049a11ab2bf98aafb0d.png

可以从上图中看到,LinkedHashMap数据结构相比较于HashMap来说,添加了双向指针,分别指向前一个节点——before和后一个节点——after,从而将所有的节点已链表的形式串联一起来,从名字上来看LinkedHashMap与HashMap有一定的联系,实际上也确实是这样,LinkedHashMap继承了HashMap,重写了HashMap的一部分方法,从而加入了链表的实现。让我们来看一下它们的继承关系。

2.2 LinkedHashMap的继承关系

2.2.1 Entry的继承关系

616024bd470ac364b31b06dd0c03b86e.png

核心数据结构中,lhm在自己的Node结构中,加入了before与after节点,表明 这是一个双向链表,那么如果尾结点的after指向了head,head的before指向了tail节点,那么这就是一个循环链表,通过代码发现并没有这么说,表明这仅仅是一个双向链表;与Node中的next不同,nex

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值