`

通过继承LinkedHashMap实现LRU缓存

 
阅读更多

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缓存

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

    Java和Android的Lru缓存及其实现原理

    Java提供了LinkedHashMap,可以用该类很方便的实现LRU算法,Java的LRULinkedHashMap是直接继承了LinkedHashMap,进行了极少的改动后可以实现LRU算法。  二、Java的LRU算法  Java的LRU算法的基础是LinkedHashMap...

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

    Android提供了一个名为`LRUCache`的类,它是专门为Android应用设计的LRU缓存实现。`LRUCache`内部使用了`LinkedHashMap`来存储数据,并实现了缓存大小限制以及LRU淘汰机制。当你添加新的元素到`LRUCache`时,如果...

    LRU算法实现1

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

    Lru算法缓存解决图片OOM

    这个类通常继承自Android的`BaseCache`或者自定义一个Map结构,如`LinkedHashMap`,因为`LinkedHashMap`已经实现了LRU特性,它维护了一个双向链表,可以按照插入或访问顺序进行操作。当缓存满时,新加入的元素会将最...

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    ava基础 基础知识 ...Java集合详解5:深入理解LinkedHashMap和LRU缓存 Java集合详解6:TreeMap和红黑树 Java集合详解7:HashSet,TreeSet与LinkedHashSet Java集合详解8:Java集合类细节精讲 JavaWeb

    YiCache_Java

    2. **LRU缓存实现**:利用`LinkedHashMap`创建一个LRU缓存实例,设置合适的容量限制,并在超过限制时根据LRU策略移除元素。 3. **二级缓存管理器**:负责协调主缓存和次级缓存之间的交互,如数据的同步、更新和迁移...

    java LRU(Least Recently Used )详解及实例代码

    在Java中,实现LRU缓存有两种常见方式,分别是使用`LinkedHashMap`和自定义数据结构,如链表结合HashMap。 1. **使用`LinkedHashMap`实现LRU缓存** `LinkedHashMap`是Java集合框架中的一个成员,它继承自`HashMap`...

    Java本地缓存的实现代码

    LinkedHashMap是Java中的一个哈希表,可以用来实现基于LRU策略的本地缓存。LinkedHashMap的按照访问顺序的特性使得其可以实现LRU策略。LRU策略即Least Recently Used策略,即最近最久未使用的元素将被淘汰,以优化...

    Java集合系列(LinkedHashMap+LinkedList+ArrayList)

    LinkedHashMap 的这个特点使得它在某些场景下非常有用,例如实现 LRU 缓存。 LinkedList LinkedList 是 Java 集合系列中的一种双向链表实现。它的主要特点是可以快速地插入和删除元素,并且可以维护元素的顺序。...

    Java LocalCache 本地缓存的实现实例

    LRU缓存将会利用这个算法来淘汰缓存中老的数据元素,从而优化内存空间。 在基于LinkedHashMap的实现中,通过调用父类LinkedHashMap的构造函数来实例化map。参数accessOrder设置为true保证其可以实现LRU策略。重写...

    LRU-Multithreading:LRU的Java实现

    总之,实现一个线程安全的LRU缓存需要对Java的并发编程有深入理解,包括使用线程安全的数据结构、控制并发访问以及处理公平性问题。通过合理的设计和优化,我们可以创建一个高效且可靠的LRU缓存系统,适用于多线程...

    LruCache工具类

    在Android开发中,LRUCache工具类是Android SDK提供的一种实现LRU缓存机制的方式,主要应用于内存级别的缓存,比如图片、数据对象等。它通过维护一个最近最少使用的数据结构,当缓存满时,会优先淘汰最久未使用的...

    三级缓存demo

    2. 实现键值对:LruCache需要继承自`LinkedHashMap`,并重写`size()`和`entryRemoved()`方法,以便正确计算缓存项的大小和处理移除事件。 3. 添加/获取数据:使用`put(key, value)`添加数据到缓存,使用`get(key)`...

    基于Java实现缓存Cache的深入分析

    在Java中,LinkedHashMap类提供了LRU缓存的实现基础,因为它同时维护了元素的插入顺序和访问顺序,这正是LRU策略所需的关键特性。 上述代码展示了一个简单的LRUCache实现,其中主要包含两个类:CachedData和...

    LruCache和DiskLruCache缓存

    LruCache位于`android.util`包下,它继承自`LinkedHashMap`,利用双向链表和哈希表的特性实现高效的缓存操作。开发者可以自定义缓存对象的大小,当达到设定值时,会根据LRU原则自动清理旧的、不常使用的数据。 2. *...

    JavaLinkedHashMap源码解析Java开发Ja

    - 当需要按照插入顺序或访问顺序遍历元素时,例如缓存管理系统,最近最少使用的淘汰策略(LRU)就常用 `LinkedHashMap`。 - 在需要保持元素顺序的 Map 实现中,`LinkedHashMap` 是一个很好的选择。 8. **性能考虑...

    详解Android的内存优化–LruCache.zip

    LruCache继承自 LinkedHashMap,并重写了`removeEldestEntry()`方法,以实现LRU策略。当缓存满时,该方法会检查最近最少使用的条目并决定是否删除。 使用LruCache的步骤如下: 1. 创建LruCache实例:你需要指定...

    LRUCache实现 同步LRUCache

    以上代码创建了一个简单的LRUCache,通过继承`LinkedHashMap`并重写`removeEldestEntry`方法实现了LRU策略。然而,这个实现并不线程安全。为了实现线程安全的LRUCache,我们可以选择以下两种方式: 1. 使用`...

Global site tag (gtag.js) - Google Analytics