java 基于linkedhashmap实现LRUCache
来源:互联网 发布:外网监控软件 编辑:程序博客网 时间:2024/06/16 18:11
所谓LRU就是最近最少被使用的意思,LRUCache的目的就是当缓存中的数据量达到一定的程度时,添加新的数据会将最近最少被使用的旧数据删除,以保障Cache中的数据都是经常需要的数据,提高命中率。下面是一个基于linkedhashmap的LRUCache的简单实现,关键是重写LinkedHashMap的removeEldestEntry方法,在LinkedHashMap中该方法默认返回false(LRUCache本身未考虑线程安全的问题)
public class BasicLRUCache<K, V> {private LinkedHashMap<K, V> map;private int cacheSize;static final int DEFAULT_CACHE_SIZE = 2;public BasicLRUCache() {this(DEFAULT_CACHE_SIZE);}public BasicLRUCache(int cacheSize) {this.cacheSize = cacheSize;int hashTableSize = (int) Math.ceil(cacheSize/0.75f) + 1;map = new LinkedHashMap<K,V>(hashTableSize, 0.75f, true) {private static final long serialVersionUID = 1L;@Overrideprotected boolean removeEldestEntry(java.util.Map.Entry<K,V> eldest) {System.out.println("size=" + size() + " cacheSize=" + BasicLRUCache.this.cacheSize);return size() > BasicLRUCache.this.cacheSize;};};}public V put(K key, V value) {return map.put(key, value);}public V get(Object key) {return map.get(key);}public static void main(String[] args) {BasicLRUCache<String, String> lruCache = new BasicLRUCache<String, String>(3);lruCache.put("1", "1");lruCache.put("2", "2");lruCache.put("3", "3");lruCache.put("4", "4");System.out.println(lruCache.get("1"));System.out.println(lruCache.get("2"));System.out.println(lruCache.get("3"));System.out.println(lruCache.get("4"));}}上面的程序运行的结果将是如下,从下面的结果中可以看出缓存大小为3时,当添加第4个元素时,最新插入的元素会被删除掉。
size=1 cacheSize=3size=2 cacheSize=3size=3 cacheSize=3size=4 cacheSize=3null234
0 0
- java 基于linkedhashmap实现LRUCache
- LinkedHashMap与LRUCache实现
- Java-LinkedHashMap与LRUcache整理
- LinkedHashMap 实现 LruCache 的底层数据结构?
- LRUCache原理及HashMap LinkedHashMap内部实现原理
- LinkedHashMap 与 LRUcache
- LinkedHashMap最佳实践:LruCache
- 【转】LinkedHashMap 与 LRUcache
- java最简单实现LRUCache
- LruCache为什么要用LinkedHashMap?
- Java中LinkedHashMap的实现
- Android中LruCache到底是如何配合LinkedHashMap实现LRU算法
- LinkedHashMap及LruCache是如何实现最少用最先淘汰算法
- LruCache实现
- LruCache原理和用法与LinkedHashMap
- java LRUCache
- Java LruCache
- Java集合----LinkedHashMap的实现原理
- 【转载】用CSS将登录框水平垂直居中于浏览器
- 给RedHat机器配置CentOS的Repository
- JS基础——属性操作
- unix i/o create函数解惑
- C修改文件内容
- java 基于linkedhashmap实现LRUCache
- 大奖赛积分
- 架设Hmailserver+webmail邮件服务器
- Android 休眠 FLAG_KEEP_SCREEN_ON
- Quick-Cocos2d-x-3.2中示例Coinfilp总结(二)
- Jsp基础知识
- 使用HttpClient实现文件和其他表单数据的上传
- Java泛型总结
- eax ...edi esp ebp寄存器简介(转)