`
flychao88
  • 浏览: 752118 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LinkedHashMap实现最简单的LRU算法

 
阅读更多
LRU是Least Recently Used 近期最少使用算法。
内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,Oracle会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
LinkedHashMap有一个removeEldestEntry(Map.Entry eldest)方法,通过覆盖这个方法,加入一定的条件,满足条件返回true。当put进新的值方法返回true时,便移除该map中最老的键和值。
package scorpio.jh.maptest;
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkedHashMapTest {
 public static void main(String[] args) {
  
    Map map = new FixedSizeLinkedHashMap();
    System.out.println(map.size());
    for(int i = 0; i < 50; i++) {
       map.put(i, true);
       System.out.println(map.size());
       System.out.println(map);
    }
 }
}
class FixedSizeLinkedHashMap extends LinkedHashMap{ 
 private static final long serialVersionUID = 6918023506928428613L;
 private static int MAX_ENTRIES = 10;
 /**
  * 获得允许存放的最大容量
  * @return int
  */
 public static int getMAX_ENTRIES() {
  return MAX_ENTRIES;
 }
 /**
  * 设置允许存放的最大容量
  * @param int max_entries
  */
 public static void setMAX_ENTRIES(int max_entries) {
  MAX_ENTRIES = max_entries;
 }
 /**
  * 如果Map的尺寸大于设定的最大长度,返回true,再新加入对象时删除最老的对象
  * @param Map.Entry eldest
  * @return int
  */
 protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_ENTRIES;
     }
}
 
分享到:
评论

相关推荐

    Java实现LRU算法.zip

    在Java中实现LRU算法,通常会使用数据结构如HashMap或LinkedHashMap来存储页面及其访问信息。HashMap提供快速的查找操作,而LinkedHashMap则同时保持了插入顺序,这对于实现LRU至关重要,因为我们需要快速找到最近...

    LRU算法 java实现

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

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

    在缓存或者数据库管理系统中,LRU算法被广泛应用,因为它的实现简单且效果良好。 LRU算法的核心思想是:当内存满时,最近最少使用的数据会被优先淘汰。也就是说,如果一个数据最近被访问过,那么它在未来被访问的...

    LRU.rar_LRU_lru 算法_lru算法

    LRU算法的优点在于其简单性和高效性,它能在大多数情况下提供较好的性能。然而,它也有局限性,例如对于某些具有长期不被访问但突然频繁访问的数据,LRU可能会频繁地换入换出这些数据,导致性能下降。此外,LRU需要...

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

    下面是一个简单的 `LRUCache` 类实现,使用 `LinkedHashMap` 来实现 LRU 策略: ```java public class LRUCache { private int cacheSize; private LinkedHashMap, Integer&gt; linkedHashMap; public LRUCache...

    操作系统os页面置换算法(java实现)Clock、Lru、Opt、Fifo

    FIFO是最简单的页面置换算法,它根据页面进入内存的顺序进行替换,即最早进入内存的页面优先被替换。尽管实现简单,但FIFO的性能通常不如LRU或Clock,因为它不考虑页面的使用频率,可能会导致“抖动”现象,即频繁...

    LRU算法实现1

    例如,以下是一个简单的LRU缓存实现,使用`LinkedHashMap`的继承方式: ```java public class LRUCache2, V&gt; extends LinkedHashMap, V&gt; { private final int MAX_CACHE_SIZE; public LRUCache2(int cacheSize) ...

    FIFO与LRU 算法实现(java).rar_FIFO Java_LRU_fifo

    FIFO算法是最简单的缓存替换策略,它基于队列数据结构。当新的数据项进入缓存时,如果缓存已满,最先进入的元素(即队列头部的元素)将被移除以腾出空间。这种策略直观且易于实现,但并不总是最优,因为它不考虑数据...

    LRU页面置换算法(Java)

    通过Java实现的LRU算法可以灵活地调整容量,适应不同的应用场景,并且通过策略模式,可以方便地切换到其他的页面置换算法,如LFU(Least Frequently Used,最不经常使用)等。 总的来说,LRU页面置换算法是解决内存...

    java LRU算法介绍与用法示例

    /* * 通过LinkHashMap简单实现LRU算法 */ / * 缓存大小 */ private int cacheSize; / * 当前缓存数目 */ private int currentSize; private LinkedHashMap, V&gt; maps; public LRUByHashMap(int cacheSize1) {...

    sanjava 页面置换可实现 (FIFO 、OTP、LRU)

    FIFO是最简单的页面置换算法,它的基本思想是按照页面进入内存的顺序来选择淘汰页面。当需要替换页面时,会选择最早进入内存的页面进行淘汰。虽然FIFO算法实现简单,但它的性能并不理想,因为它可能会导致Belady异常...

    java-lru-demo:这是LRU算法的实现

    在Java中,LRU算法常用于缓存设计,比如`HashMap`或`LinkedHashMap`的实现。 **LRU算法原理** LRU算法的核心思想是:如果一个数据最近被访问过,那么它在未来的访问概率会更高。因此,当缓存满时,应该优先移除最近...

    LRU.rar_LRU

    在Java中,实现LRU算法可以帮助我们优化资源管理,尤其是在处理大数据或者高并发场景下,合理利用内存资源至关重要。 LRU算法的核心在于维护一个有序的数据结构,以便快速定位到最近最少使用的数据。常见的实现方式...

    java实现操作系统的各个置换算法

    FIFO是最简单的置换算法,按照页面进入内存的顺序进行替换。当需要换出页面时,选择最早进入内存的页面。Java中可以使用LinkedList作为数据结构来实现FIFO算法,因为它的插入和删除操作都是O(1)的时间复杂度。 4. ...

    详解Java实现LRU缓存

    使用 LinkedHashMap 实现 LRU 缓存是最简单的方法,因为 LinkedHashMap 自身已经实现了顺序存储,默认情况下是按照元素的添加顺序存储,也可以启用按照访问顺序存储,即最近读取的数据放在最前面,最早读取的数据...

    Java和Android的LRU缓存及实现原理

    二、Java中的LRU算法与LinkedHashMap 1. `HashMap`基础 `LinkedHashMap`是在`HashMap`基础上扩展的。`HashMap`采用数组+链表的数据结构,其中每个元素是一个`Entry, V&gt;`对象。`Entry`包含键值对的key、value以及指向...

    LRU.rar_WORKING

    以下是一个简单的LRU缓存的Java实现: ```java import java.util.HashMap; import java.util.LinkedList; import java.util.Map; public class LRUCache, V&gt; { private int capacity; // 缓存容量 private ...

    基于Java页面置换算法的模拟实现及命中率对比【100012526】

    Java中可以通过数据结构如LinkedHashMap来实现LRU策略。 3. **首次不命中置换算法(FIFO)**:这种算法简单直观,按照页面进入内存的顺序进行替换,即最先进入内存的页面最先被替换。然而,FIFO经常会导致Belady's...

    操作系统页面置换算法

    1. **最近最少使用(LRU)**:LRU算法假设未来最不常使用的页面现在最有可能被访问。它维护一个页面使用历史记录,并替换最近最少使用的页面。在Java中,可以通过数据结构如HashMap或LinkedHashMap来实现,后者可以...

Global site tag (gtag.js) - Google Analytics