经常使用的元数据Hashmap

时间:2009-11-06 17:35:35

标签: java caching hashtable

是否有任何静态大小哈希表的实现将条目限制为最近或最常用的元数据?我不想自己跟踪这些信息。

我知道大多数缓存组件都会跟踪这一点,但我宁愿不介绍很多新的依赖项。

2 个答案:

答案 0 :(得分:10)

您可以使用标准JDK库使用LinkedHashMap

构建LRU缓存
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

constructor

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;
    }
}