LinkedHashMap

本文介绍了如何利用Java中的LinkedHashMap实现LRU(Least Recently Used)缓存策略。通过双链表和HashMap结合的方式,当LRU达到一定容量时,最近最少使用的元素会被淘汰。HashMap的put方法会调用LinkedHashMap中重写的方法,以维护LRU特性。通过覆盖removeEldestEntry方法,可以自定义超出容量时的行为。
摘要由CSDN通过智能技术生成

LRU

实现LRU的原理

使用双链表 + HashMap 来实现 LRU

访问结点 get(key), 首先根据key 在map 中获取 结点的 引用, 然后把该结点由当前位置调整到链表尾部。

插入结点 put(key,val) 首先尝试获取 key结点,若存在则修改节点值,且类似于访问,把结点调整到链表尾部。

                                   若不存在该key, 则若LRU还有容量,则将该结点直接插在尾部,且插入到map中。

                                   若LRU已满,考虑替换,将头节点删除,把新结点接在尾部,且插入map中。

可以看出该过程,越久没使用的结点,越靠近链表头部。

HashMap

这些方法用于其子类LinkedHashMap 去维护 LRU的实现(默认情况LRU无限容量,不存在满的情况)

HashMap 本身的put 等方法维护map 本身, 但是map 的put方法也调用了以下三个空方法,这三个方法在子类LinkedHashMap中重写,所以 HashMap 的get 方法回调用重写的这三个方法,来维护双链表。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值