`
xiaoZ5919
  • 浏览: 404690 次
  • 性别: Icon_minigender_1
  • 来自: 安平人@北京
博客专栏
Group-logo
Netty学习笔记
浏览量:73194
社区版块
存档分类
最新评论

图解LinkedHashMap的LRU

 
阅读更多

数据结构支持: 双向循环链表

改造过程:
1,在LinkedHashMap的初始化过程添加一个dumy的header双向链表头
2,在Entry添加before和after

过程演示:
1.  dumy的header
      before(header)<----header --->after(header)
2.   插入第一个entry
                                                   entry1 
                                                 /         \
     before(header)<----header --->after(header)

3.   插入第二个entry

     header<----entry1---->entry2---->header--->entry1
     新插入的元素总是放在header之前,而header的after总是总早放入链表中的那个元素entry1
    
4.  当其中一个entry3被访问时,将entry3从原位置删除并移动到header之前
      访问之前
      header<----entry1---->entry2---->entry3----->entry4---->header--->entry1
      访问之后
      从当前位置删除:
      header<----entry1---->entry2----->entry4---->header--->entry1
      插入到header之前
      header<----entry1---->entry2---->entry4----->entry3---->header--->entry1
5.   执行LRU清除操作
      删除header.after即entry1并重新指向entry1的after。
       header<-----entry2---->entry4----->entry3---->header--->entry2


code:
请参照addToHead以及recordAccess
   

0
0
分享到:
评论

相关推荐

    Java实现LRU算法.zip

    HashMap提供快速的查找操作,而LinkedHashMap则同时保持了插入顺序,这对于实现LRU至关重要,因为我们需要快速找到最近最少使用的页面。 首先,我们需要创建一个Page类,它包含页面编号和访问时间等信息。页面编号...

    LRU.rar_LRU_LRU java_lru.java

    在Java中,我们可以使用数据结构如HashMap或LinkedHashMap来实现LRU算法。HashMap提供了快速的查找操作,但不保留元素的插入顺序;而LinkedHashMap则同时保持了元素的插入顺序和访问顺序,这正是实现LRU所需要的特性...

    LRU.rar_LRU_LRU ja

    通过分析`LRU.java`,我们可以学习如何在实际项目中应用LRU缓存策略,理解如何利用`LinkedHashMap`实现高效的缓存管理,并了解LRU算法的工作机制。此外,还可以学习到如何处理内存限制下的数据存储问题,这对优化...

    LinkedHashmap的使用

    2. 需要按最近使用(LRU)策略进行缓存淘汰时,LinkedHashMap可以方便地根据访问顺序实现。 总的来说,LinkedHashMap结合了HashMap的高效性和有序性的特点,适用于那些对元素顺序有特定需求但又希望保持高效性能的...

    实现 LRU 算法,和 Caffeine 和 Redis 中的缓存淘汰策略.docx

    尽管 `LinkedHashMap` 提供了便利的 LRU 实现,但在某些面试场景下,面试官可能期望候选人能够自己实现 LRU 算法,以更好地理解其工作原理。基础的 LRU 实现通常需要以下步骤: 1. 使用一个双向链表来存储数据项,...

    LRU.rar_LRU

    在实际编程中,Java的`java.util.LinkedHashMap`类已经内置了LRU的逻辑,可以通过设置`accessOrder`属性为`true`来实现LRU策略。这样我们可以直接利用`LinkedHashMap`来创建一个LRU缓存实例,无需手动实现数据结构和...

    LRU算法四种实现方式介绍.docx

    LRU 算法四种实现方式介绍 LRU 算法全称是 Least Recently Used,即最近最久未使用的意思。LRU 算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的...

    LRU.rar_LRU java

    1. **初始化LRU Cache**:创建一个`LinkedHashMap`实例,设置其构造参数`accessOrder`为`true`,表示按照访问顺序排序。 2. **put操作**:在`put`方法中,首先检查键值对是否已存在,如果存在则更新值并将对应条目移...

    LRU.rar_LRU_lru 算法_lru算法

    在编程语言中,LRU缓存的实现通常会用到数据结构如Java的`LinkedHashMap`,Python的`collections.OrderedDict`等,它们能方便地实现按访问顺序更新的数据结构。 LRU算法的优点在于其简单性和高效性,它能在大多数...

    lru.rar_LRU

    在实际编程中,可以使用各种编程语言的库来实现LRU,例如Python的`functools.lru_cache`,Java的`LinkedHashMap`,或者是C++的自定义实现。 总之,LRU算法是一种高效的内存管理策略,通过优先淘汰最近最少使用的...

    详解Java实现LRU缓存

    Java 实现 LRU 缓存有多种方法,本文将介绍使用 LinkedHashMap 实现 LRU 缓存的方法。 LRU 缓存原理 LRU 缓存的原理很简单,就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉。例如,我们缓存 ...

    LRU算法LRU算法LRU算法LRU算法

    在Java中,实现LRU算法可以使用`java.util.LinkedHashMap`类,它内部已经实现了LRU的逻辑。通过设置`accessOrder`参数为`true`,`LinkedHashMap`会按照访问顺序进行排序,从而实现LRU的效果。 总结一下,LRU算法是...

    LRU算法--utils工具包

    在Java中实现LRU缓存,我们可以借助一些内置工具或第三方库,如Java 8的`ConcurrentHashMap`结合`LinkedHashMap`,或者Google的Guava库中的`Cache`类。这篇博客文章可能讨论了如何使用这些工具来构建一个LRU缓存系统...

    LRU算法 java实现

    LRU(Least Recently Used)算法是一种常用的页面替换策略,用于管理有限的...在实际应用中,LRU算法广泛应用于数据库的缓存系统、操作系统内存管理和编程语言的内置缓存机制(如Java的`java.util.LinkedHashMap`)。

    LRU页面置换算法(Java)

    在Java中实现LRU页面置换算法,通常会用到数据结构如HashMap或LinkedHashMap,因为它们能够提供快速的查找和按照访问顺序排序的功能。HashMap提供了O(1)的时间复杂度进行查找,而LinkedHashMap则在HashMap的基础上...

    Lru缓存代码

    5. **应用场景**:LRU缓存适用于需要快速响应但又受限于内存大小的场景,例如数据库的查询缓存、操作系统的页面替换算法,以及编程语言如Java和Python的内置映射类(如Java的`LinkedHashMap`和Python的`dict`)。...

    LRU.zip_zip

    在Java中,可以使用HashMap或LinkedHashMap来实现LRU。HashMap提供快速的查找和插入操作,但不保留元素的插入顺序;而LinkedHashMap则保留了元素的插入顺序,便于实现LRU。开发者可能会定义一个类,包含一个大小有限...

    LRU算法实现1

    在Java中,LRU缓存的实现通常有两种方式:使用`LinkedHashMap`或自定义数据结构(链表+HashMap)。 ### LRU Cache的`LinkedHashMap`实现 `LinkedHashMap`是Java集合框架中的一个类,继承自`HashMap`,并添加了双向...

Global site tag (gtag.js) - Google Analytics