`

通过继承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和Android的Lru缓存及其实现原理

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

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

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

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

    通过一个特殊的构造函数,三个参数的这种,最后一个布尔值参数表示是否要维护最近访问顺序,如果是 true 的话会维护最近访问的顺序,如果是 false 的话,只会维护插入...LinkedHashMap这种结构非常适合构造 LRU 缓存。

    LinkedHashMap的实现原理

    这是关于Java学习的主要针对LinkedHashMap的实现原理

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

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

    集合常见面试题

    如何用LinkedHashMap实现LRU? 如何用TreeMap实现一致性hash? ConcurrentHashMap是如何在保证并发安全的同时提高性能? ConcurrentHashMap是如何让多线程同时参与扩容? LinkedBlockingQueue、DelayQueue是如何实现...

    ImageLoaderDemo图片三级缓存

    分成三级对图片进行缓存,第一级采用LinkedHashMap(LRU算法),第二季采用ConcurrentHashMap线程安全控制

    今天会是有Offer的一天么:面试时不要再问我LinkedHashMap了

    要注意一点的是LinkedHashMap是可以实现LRU缓存策略的,前提是你需要将LinkedHashMap中的accessorder属性设置为true。 因此你基本可以认为LinkedHashMap是LinkedList和HashMap的一个组合。 LinkedHashMap简介 ...

    JAVA工具类

    LruCacheUtils - 基于LinkedHashMap实现LRU缓存的工具类 MemcachedUtils - 基于memcached的工具类 RedisUtils - 基于redis的工具类,与redis的集群配置无缝结合 db JdbcUtils - 操作jdbc的工具类 MongodbUtils - ...

    com.yangc.utils:工作中积累的工具类

    cacheEhCacheUtils - 基于ehcache的工具类LruCacheUtils - 基于LinkedHashMap实现LRU缓存的工具类MemcachedUtils - 基于memcached的工具类XMemcachedUtils - 基于memcached的工具类(使用XMemcached客户端)Redis...

    深入Java集合学习系列(四):LinkedHashMap的实现原理

    深入Java集合学习系列(四): LinkedHashMap的实现原理

    android实现缓存图片等数据

    采用LinkedHashMap自带的LRU 算法缓存数据, 可检测对象是否已被虚拟机回收,并且重新计算当前缓存大小,清除缓存中无用的键值对象(即已经被虚拟机回收但未从缓存清除的数据);  * 默认内存缓存大小为: 4 * 1024 * ...

    leetcode跳跃-datastructure:数据结构

    基于LinkedHashMap实现LRU算法 PalindromeBaseArray 基于数组实现回文串的判断 链表练习 SingleLinkedList 实现单链表的增、删、改、查操作 LRUBaseLinkedList 基于单链表实现LRU算法 PalindromeBaseLinked 基于链表...

    LinkedHashMap

    LinkedHashMap源代码,Java中Map的一种实现子类。

    leetcode下载-LruCache:实现LRU算法的Cache类

    SDK中的LruCache类参考实现的LRU算法缓存存储类. 原理 之前分析过Lru算法的实现方式:HashMap+双向链表,参考链接: 这里主要介绍Android SDK中LruCache缓存算法的实现. 构造函数 LruCache只有一个构造函数,并且有一个...

    尚硅谷-深入Java集合4:LinkedHashMap的实现原理.pdf

    本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...

    javalruleetcode-java12-fundamentals-cache-implementations-workshop:LRU/

    lru leetcode java12-fundamentals-cache-implementations-workshop 参考 前言 本次研讨会的目标 理解 LRU 缓存的概念 理解 LFU 缓存的概念 实现 LRU 和 LFU 缓存 看看守卫在列表实现中是如何有用的 工作坊: lfu....

    尚硅谷-深入java8的集合4:LinkedHashMap的实现原理.pdf

    本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...

    LinkedHashmap的使用

    这个demo主要讲解了LinkedHashmap的使用,希望可以帮助需要的同学.

Global site tag (gtag.js) - Google Analytics