经常使用的元数据Hashmap
是否有任何静态大小哈希表的实现将条目限制为最近或最常用的元数据? 我不想自己跟踪这些信息。
我知道大多数缓存组件都会跟踪这一点,但我宁愿不介绍很多新的依赖项。
您可以使用LinkedHashMap
使用标准JDK库构建LRU缓存:
public class MyLRUCache extends LinkedHashMap { 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 eldest) { return size() > maxEntries; } }
您可能也希望使用WeakReference
。
使用LinkedHashMap并覆盖removeEldestEntry并确保使用允许accessOrder as true
的构造函数
Accessordered使地图删除最近访问过的项目而不是最旧的项目。
所有查询都会改变地图的结构,因此会慢一点。
例:
public AccesOrderedLRUCache extends LinkedHashMap{ private final m_capacity; public AccesOrderedLRUCache(int capacity) { super(0.75*capacity, 0.75, true); m_capacity = capacity; } @Override protected boolean removeEldestEntry (Map.Entry eldest) { return size() > getCapacity(); } public int getCapacity() { return m_capacity; } }