import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
public class LRUCache {
private long lookups;
private long hits;
private long inserts;
private long evictions;
private Map map;
public void init(int initialSize, final int limitSize) {
map = new LinkedHashMap(initialSize, 0.75f, true) {
protected boolean removeEldestEntry(Map.Entry eldest) {
if (size() > limitSize) {
evictions++;
return true;
}
return false;
}
};
}
public int size() {
synchronized (map) {
return map.size();
}
}
public Object put(Object key, Object value) {
synchronized (map) {
inserts++;
return map.put(key, value);
}
}
public Object get(Object key) {
synchronized (map) {
Object val = map.get(key);
lookups++;
if (val != null) {
hits++;
}
return val;
}
}
public void clear() {
synchronized (map) {
map.clear();
}
}
private static String calcHitRatio(long lookups, long hits) {
if (lookups==0) return "0.00";
if (lookups==hits) return "1.00";
int hundredths = (int)(hits*100/lookups); // rounded down
if (hundredths < 10) return "0.0" + hundredths;
return "0." + hundredths;
}
public Map getStatistics(){
Map statMap = new HashMap();
synchronized (map) {
statMap.put("lookups", lookups);
statMap.put("hits", hits);
statMap.put("hitratio", calcHitRatio(lookups,hits));
statMap.put("inserts", inserts);
statMap.put("evictions", evictions);
statMap.put("size", map.size());
}
return statMap;
}
}
相关参考:http://dennis-zane.iteye.com/blog/128278
分享到:
相关推荐
Python开发者:对于想要了解或实现LRU缓存算法的Python开发者来说,这个资源是一个很好的学习资料。 数据结构和算法爱好者:LRU缓存算法是数据结构和算法领域的一个经典问题,对于喜欢挑战和学习数据结构和算法的人...
链表(上):如何实现LRU缓存淘汰算法
LRU算法是常用的缓存替代算法,文档中告诉我们如何实现LRU算法
本算法为 C++ 实现的 LRU 缓存算法,包含普通 LRU、定时过期的 LRU、不定时过期的LRU,数据结构为双向链表及哈希表结合的方式,实现了 get() 和 put() 两个操作,且所有操作的平均时间复杂度均可以控制在 O(1) 内。
(LRU缓存算法) C++版本,适用于 ##LRU算法介绍 引自: Discards the least recently used items first. This algorithm requires keeping track of what was used when, which is expensive if one wants to make ...
这里的LRUCache类维护了一个双向链表和一个哈希表,用于实现LRU算法。具体实现细节如下: - get方法:首先在哈希表中查找对应的键值对,如果不存在,则返回-1;如果存在,则将对应的节点从双向链表中删除,并将其...
缓存淘汰算法之LRU
采用LRU置换算法的缓存类,通过封装Dictionary和LinkedList来实现,方便大家使用,也希望大家给出改进意见
一个LRU算法的实现.适合于计算机体系结构课程的实验
06丨链表(上):如何实现LRU缓存淘汰算法?1
06丨链表(上):如何实现LRU缓存淘汰算法?.pdf
用Java写的一个Cache,内部实现了LRU算法~
LRU页面置换算法,最近最少使用算法,目前很常用的缓存算法
Nodejs基于LRU算法实现的缓存处理操作示例.docx
Android提供了LRUCache类,可以方便的使用它来实现LRU算法的缓存。Java提供了LinkedHashMap,可以用该类很方便的实现LRU算法,Java的LRULinkedHashMap就是直接继承了LinkedHashMap,进行了极少的改动后就可以实现LRU...
Android提供了LRUCache类,可以方便的使用它来实现LRU算法的缓存。Java提供了LinkedHashMap,可以用该类很方便的实现LRU算法,Java的LRULinkedHashMap是直接继承了LinkedHashMap,进行了极少的改动后可以实现LRU...
15 当Buffer Pool中的缓存页不够的时候,如何基于LRU算法淘汰部分缓存.pdf
基于双向链表和哈希表实现的LRU进程内缓存包,C语言实现。改编自Features测试全面LRU淘汰算法双向链表和哈希表的存储模型基于键值对,键和值的数据类型为字符串对全局存储结构的写操作上锁,并发安全Usage#include ...
Lru算法缓存解决图片OOM,一个比较好的解决方案
LRU缓存HashMap+双向链表实现,java版本,导入即用