import java.util.LinkedHashMap;
import java.util.Map;
/**
* LinkedHashMap默认是不删除元素的,通过重写removeEldestEntry来实现最大容量
* @author bean
*/
public class LRUMap<K, V> extends LinkedHashMap<K, V> {
private static final long serialVersionUID = 6918023506928428613L;
// 最大容量
public static int MAX_SIZE = 10;
public LRUMap(int initialCapacity, float loadFactor, boolean accessOrder) {
super(initialCapacity, loadFactor, accessOrder);
}
/**
* 如果Map的尺寸大于设定的最大容量,返回true,再新加入对象时删除最老的对象
*/
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > MAX_SIZE;
}
public static void main(String[] args) {
Map<Integer, Integer> map=new LRUMap<Integer, Integer>(10,0.75f,true);
LRUMap.MAX_SIZE=4;
map.put(1, 1);
map.put(2, 2);
map.put(3, 3);
map.put(4, 4);
map.get(3);
map.put(5, 5);
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.err.println(entry.getKey());
}
//打印结果是 2 4 3 5 ,实现了LRU的功能
}
}
分享到:
相关推荐
Java 实现 LRU 缓存有多种方法,本文将介绍使用 LinkedHashMap 实现 LRU 缓存的方法。 LRU 缓存原理 LRU 缓存的原理很简单,就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉。例如,我们缓存 ...
Java提供了LinkedHashMap,可以用该类很方便的实现LRU算法,Java的LRULinkedHashMap是直接继承了LinkedHashMap,进行了极少的改动后可以实现LRU算法。 二、Java的LRU算法 Java的LRU算法的基础是LinkedHashMap...
Android提供了一个名为`LRUCache`的类,它是专门为Android应用设计的LRU缓存实现。`LRUCache`内部使用了`LinkedHashMap`来存储数据,并实现了缓存大小限制以及LRU淘汰机制。当你添加新的元素到`LRUCache`时,如果...
例如,以下是一个简单的LRU缓存实现,使用`LinkedHashMap`的继承方式: ```java public class LRUCache2, V> extends LinkedHashMap, V> { private final int MAX_CACHE_SIZE; public LRUCache2(int cacheSize) ...
这个类通常继承自Android的`BaseCache`或者自定义一个Map结构,如`LinkedHashMap`,因为`LinkedHashMap`已经实现了LRU特性,它维护了一个双向链表,可以按照插入或访问顺序进行操作。当缓存满时,新加入的元素会将最...
ava基础 基础知识 ...Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb
2. **LRU缓存实现**:利用`LinkedHashMap`创建一个LRU缓存实例,设置合适的容量限制,并在超过限制时根据LRU策略移除元素。 3. **二级缓存管理器**:负责协调主缓存和次级缓存之间的交互,如数据的同步、更新和迁移...
在Java中,实现LRU缓存有两种常见方式,分别是使用`LinkedHashMap`和自定义数据结构,如链表结合HashMap。 1. **使用`LinkedHashMap`实现LRU缓存** `LinkedHashMap`是Java集合框架中的一个成员,它继承自`HashMap`...
LinkedHashMap是Java中的一个哈希表,可以用来实现基于LRU策略的本地缓存。LinkedHashMap的按照访问顺序的特性使得其可以实现LRU策略。LRU策略即Least Recently Used策略,即最近最久未使用的元素将被淘汰,以优化...
LinkedHashMap 的这个特点使得它在某些场景下非常有用,例如实现 LRU 缓存。 LinkedList LinkedList 是 Java 集合系列中的一种双向链表实现。它的主要特点是可以快速地插入和删除元素,并且可以维护元素的顺序。...
LRU缓存将会利用这个算法来淘汰缓存中老的数据元素,从而优化内存空间。 在基于LinkedHashMap的实现中,通过调用父类LinkedHashMap的构造函数来实例化map。参数accessOrder设置为true保证其可以实现LRU策略。重写...
总之,实现一个线程安全的LRU缓存需要对Java的并发编程有深入理解,包括使用线程安全的数据结构、控制并发访问以及处理公平性问题。通过合理的设计和优化,我们可以创建一个高效且可靠的LRU缓存系统,适用于多线程...
在Android开发中,LRUCache工具类是Android SDK提供的一种实现LRU缓存机制的方式,主要应用于内存级别的缓存,比如图片、数据对象等。它通过维护一个最近最少使用的数据结构,当缓存满时,会优先淘汰最久未使用的...
2. 实现键值对:LruCache需要继承自`LinkedHashMap`,并重写`size()`和`entryRemoved()`方法,以便正确计算缓存项的大小和处理移除事件。 3. 添加/获取数据:使用`put(key, value)`添加数据到缓存,使用`get(key)`...
在Java中,LinkedHashMap类提供了LRU缓存的实现基础,因为它同时维护了元素的插入顺序和访问顺序,这正是LRU策略所需的关键特性。 上述代码展示了一个简单的LRUCache实现,其中主要包含两个类:CachedData和...
LruCache位于`android.util`包下,它继承自`LinkedHashMap`,利用双向链表和哈希表的特性实现高效的缓存操作。开发者可以自定义缓存对象的大小,当达到设定值时,会根据LRU原则自动清理旧的、不常使用的数据。 2. *...
- 当需要按照插入顺序或访问顺序遍历元素时,例如缓存管理系统,最近最少使用的淘汰策略(LRU)就常用 `LinkedHashMap`。 - 在需要保持元素顺序的 Map 实现中,`LinkedHashMap` 是一个很好的选择。 8. **性能考虑...
LruCache继承自 LinkedHashMap,并重写了`removeEldestEntry()`方法,以实现LRU策略。当缓存满时,该方法会检查最近最少使用的条目并决定是否删除。 使用LruCache的步骤如下: 1. 创建LruCache实例:你需要指定...
以上代码创建了一个简单的LRUCache,通过继承`LinkedHashMap`并重写`removeEldestEntry`方法实现了LRU策略。然而,这个实现并不线程安全。为了实现线程安全的LRUCache,我们可以选择以下两种方式: 1. 使用`...