是否有任何静态大小哈希表的实现将条目限制为最近或最常用的元数据?我不想自己跟踪这些信息。
我知道大多数缓存组件都会跟踪这一点,但我宁愿不介绍很多新的依赖项。
答案 0 :(得分:10)
您可以使用标准JDK库使用LinkedHashMap
:
public class MyLRUCache<K, V> extends LinkedHashMap<K, V> {
private final int maxEntries;
public MyLRUCache(int maxEntries) {
// you can be a bit fancy with capacity and load factor
super(16, 0.75, true);
this.maxEntries = maxEntries;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > maxEntries;
}
}
您可能也希望使用WeakReference
。
答案 1 :(得分:2)
使用LinkedHashMap并覆盖removeEldestEntry,并确保使用。{
允许accessOrder as true
Accessordered使地图删除最近访问过的项目而不是最年长的项目。
所有查询都会改变地图的结构,因此会慢一些。
示例:
public AccesOrderedLRUCache<V,K> extends LinkedHashMap<V,K>{
private final m_capacity;
public AccesOrderedLRUCache(int capacity) {
super(0.75*capacity, 0.75, true);
m_capacity = capacity;
}
@Override
protected boolean removeEldestEntry (Map.Entry<K,V> eldest) {
return size() > getCapacity();
}
public int getCapacity() {
return m_capacity;
}
}