java实现极简的LRU算法
2015-11-02 23:11
447 查看
import java.util.LinkedHashMap;
import java.util.Map;
/**
* LRU (Least Recently Used)
*/
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
/**
*
*/
private static final long serialVersionUID = 1L;
//缓存大小
private int cacheSize;
public LRUCache(int cacheSize) {
//第三个参数true是关键
super(10, 0.75f, true);
this.cacheSize = cacheSize;
}
/**
* 缓存是否已满
*/
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
boolean r = size() > cacheSize;
if(r){
System.out.println("清除缓存key:"+eldest.getKey());
}
return r;
}
//测试
public static void main(String[] args) {
LRUCache<String, String> cache = new LRUCache<String, String>(5);
cache.put("1", "1");
cache.put("2", "2");
cache.put("3", "3");
cache.put("4", "4");
cache.put("5", "5");
System.out.println("初始:");
System.out.println(cache.keySet());
System.out.println("访问3:");
cache.get("3");
System.out.println(cache.keySet());
System.out.println("访问2:");
cache.get("2");
System.out.println(cache.keySet());
System.out.println("增加数据6,7:");
cache.put("6", "6");
cache.put("7", "7");
System.out.println(cache.keySet());
}
}
运行结果如下:
初始化:
[1, 2, 3, 4, 5]
访问3:
[1, 2, 4, 5, 3]
访问2:
[1, 4, 5, 3, 2]
增加数据6,7:
清除缓存key:1
清除缓存key:4
[5, 3, 2, 6, 7]
import java.util.Map;
/**
* LRU (Least Recently Used)
*/
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
/**
*
*/
private static final long serialVersionUID = 1L;
//缓存大小
private int cacheSize;
public LRUCache(int cacheSize) {
//第三个参数true是关键
super(10, 0.75f, true);
this.cacheSize = cacheSize;
}
/**
* 缓存是否已满
*/
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
boolean r = size() > cacheSize;
if(r){
System.out.println("清除缓存key:"+eldest.getKey());
}
return r;
}
//测试
public static void main(String[] args) {
LRUCache<String, String> cache = new LRUCache<String, String>(5);
cache.put("1", "1");
cache.put("2", "2");
cache.put("3", "3");
cache.put("4", "4");
cache.put("5", "5");
System.out.println("初始:");
System.out.println(cache.keySet());
System.out.println("访问3:");
cache.get("3");
System.out.println(cache.keySet());
System.out.println("访问2:");
cache.get("2");
System.out.println(cache.keySet());
System.out.println("增加数据6,7:");
cache.put("6", "6");
cache.put("7", "7");
System.out.println(cache.keySet());
}
}
运行结果如下:
初始化:
[1, 2, 3, 4, 5]
访问3:
[1, 2, 4, 5, 3]
访问2:
[1, 4, 5, 3, 2]
增加数据6,7:
清除缓存key:1
清除缓存key:4
[5, 3, 2, 6, 7]
相关文章推荐
- Jeecms去除Eclipse开发环境中的项目名
- MyEclipse中JAR System library 怎么更改
- Maven学习 (三) 使用m2eclipse创建web项目
- springmvc学习总结之配置篇
- Maven学习 (二) Eclipse 上安装 Maven3插件
- MyBatis入门(六)---mybatis与spring的整合
- Spring事务管理
- Java 泛型
- java入门程序100例学习笔记(004个人所得税)
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- 浅谈java与.Net的相互调用
- Java字符串
- java ClassLoader详解
- java---表、栈和队列
- Spring Cache
- Java多线程中的join()方法
- 用java中的URL读取网页信息
- Java并发小结,先验条件、后验条件等概念
- Eclipse搜索文件名,以及搜索文件中特定的内容