LRU是Least Recently Used 近期最少使用算法。
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算法,通常会使用数据结构如HashMap或LinkedHashMap来存储页面及其访问信息。HashMap提供快速的查找操作,而LinkedHashMap则同时保持了插入顺序,这对于实现LRU至关重要,因为我们需要快速找到最近...
LRU(Least Recently Used)算法是一种常用的页面替换策略,用于管理有限的...在实际应用中,LRU算法广泛应用于数据库的缓存系统、操作系统内存管理和编程语言的内置缓存机制(如Java的`java.util.LinkedHashMap`)。
在缓存或者数据库管理系统中,LRU算法被广泛应用,因为它的实现简单且效果良好。 LRU算法的核心思想是:当内存满时,最近最少使用的数据会被优先淘汰。也就是说,如果一个数据最近被访问过,那么它在未来被访问的...
LRU算法的优点在于其简单性和高效性,它能在大多数情况下提供较好的性能。然而,它也有局限性,例如对于某些具有长期不被访问但突然频繁访问的数据,LRU可能会频繁地换入换出这些数据,导致性能下降。此外,LRU需要...
下面是一个简单的 `LRUCache` 类实现,使用 `LinkedHashMap` 来实现 LRU 策略: ```java public class LRUCache { private int cacheSize; private LinkedHashMap, Integer> linkedHashMap; public LRUCache...
FIFO是最简单的页面置换算法,它根据页面进入内存的顺序进行替换,即最早进入内存的页面优先被替换。尽管实现简单,但FIFO的性能通常不如LRU或Clock,因为它不考虑页面的使用频率,可能会导致“抖动”现象,即频繁...
例如,以下是一个简单的LRU缓存实现,使用`LinkedHashMap`的继承方式: ```java public class LRUCache2, V> extends LinkedHashMap, V> { private final int MAX_CACHE_SIZE; public LRUCache2(int cacheSize) ...
FIFO算法是最简单的缓存替换策略,它基于队列数据结构。当新的数据项进入缓存时,如果缓存已满,最先进入的元素(即队列头部的元素)将被移除以腾出空间。这种策略直观且易于实现,但并不总是最优,因为它不考虑数据...
通过Java实现的LRU算法可以灵活地调整容量,适应不同的应用场景,并且通过策略模式,可以方便地切换到其他的页面置换算法,如LFU(Least Frequently Used,最不经常使用)等。 总的来说,LRU页面置换算法是解决内存...
/* * 通过LinkHashMap简单实现LRU算法 */ / * 缓存大小 */ private int cacheSize; / * 当前缓存数目 */ private int currentSize; private LinkedHashMap, V> maps; public LRUByHashMap(int cacheSize1) {...
FIFO是最简单的页面置换算法,它的基本思想是按照页面进入内存的顺序来选择淘汰页面。当需要替换页面时,会选择最早进入内存的页面进行淘汰。虽然FIFO算法实现简单,但它的性能并不理想,因为它可能会导致Belady异常...
在Java中,LRU算法常用于缓存设计,比如`HashMap`或`LinkedHashMap`的实现。 **LRU算法原理** LRU算法的核心思想是:如果一个数据最近被访问过,那么它在未来的访问概率会更高。因此,当缓存满时,应该优先移除最近...
在Java中,实现LRU算法可以帮助我们优化资源管理,尤其是在处理大数据或者高并发场景下,合理利用内存资源至关重要。 LRU算法的核心在于维护一个有序的数据结构,以便快速定位到最近最少使用的数据。常见的实现方式...
FIFO是最简单的置换算法,按照页面进入内存的顺序进行替换。当需要换出页面时,选择最早进入内存的页面。Java中可以使用LinkedList作为数据结构来实现FIFO算法,因为它的插入和删除操作都是O(1)的时间复杂度。 4. ...
使用 LinkedHashMap 实现 LRU 缓存是最简单的方法,因为 LinkedHashMap 自身已经实现了顺序存储,默认情况下是按照元素的添加顺序存储,也可以启用按照访问顺序存储,即最近读取的数据放在最前面,最早读取的数据...
二、Java中的LRU算法与LinkedHashMap 1. `HashMap`基础 `LinkedHashMap`是在`HashMap`基础上扩展的。`HashMap`采用数组+链表的数据结构,其中每个元素是一个`Entry, V>`对象。`Entry`包含键值对的key、value以及指向...
以下是一个简单的LRU缓存的Java实现: ```java import java.util.HashMap; import java.util.LinkedList; import java.util.Map; public class LRUCache, V> { private int capacity; // 缓存容量 private ...
Java中可以通过数据结构如LinkedHashMap来实现LRU策略。 3. **首次不命中置换算法(FIFO)**:这种算法简单直观,按照页面进入内存的顺序进行替换,即最先进入内存的页面最先被替换。然而,FIFO经常会导致Belady's...
1. **最近最少使用(LRU)**:LRU算法假设未来最不常使用的页面现在最有可能被访问。它维护一个页面使用历史记录,并替换最近最少使用的页面。在Java中,可以通过数据结构如HashMap或LinkedHashMap来实现,后者可以...