代码之家  ›  专栏  ›  技术社区  ›  monksy

常用元数据哈希图

  •  2
  • monksy  · 技术社区  · 15 年前

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

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

    2 回复  |  直到 15 年前
        1
  •  10
  •   notnoop    15 年前

    您可以使用标准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 还有。

        2
  •  2
  •   Fedearne    15 年前

    使用 LinkedHashMap 超驰 removeEldestEntry 确保使用 constructor 允许 accessOrder as true

    访问器使映射删除最近访问次数最少的项,而不是最旧的项。

    所有查询都会改变映射的结构,因此速度会稍微慢一点。

    例子:

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