【问题标题】:Exists a Java Map cache data structure? [closed]是否存在 Java Map 缓存数据结构? [关闭]
【发布时间】:2022-01-10 10:59:17
【问题描述】:

我需要在我的 java 应用程序中处理一个缓存地图。 这是地图是一个不断增长的结构,我需要一些方法来删除地图中一段时间​​不使用的旧对象。

是否有任何现有的 Java 地图结构可以实现此逻辑,定义地图中对象的最大生命周期或实现此地图的一些通用库? 我正在使用 Java8 和 Java-Commons 库。

【问题讨论】:

  • 看看 Google Guava Cache 的实现!

标签: java dictionary caching java-8


【解决方案1】:

如果您可以添加外部库,您可以使用guavaCaffeine

另一种选择是让守护线程定期唤醒并删除未触及的对象,但我认为使用现有库更好。

【讨论】:

    【解决方案2】:

    您可以将LinkedHashMap 扩展为 LRU 缓存。

    static class LRUCache<K, V> extends LinkedHashMap<K, V> {
        private int maxSize;
    
        private LRUCache(int maxSize) {
            super(maxSize, 0.75f, true);
            this.maxSize = maxSize;
        }
    
        @Override
        protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
            return size() > maxSize;
        }
    }
    
    public static void main(String[] args) {
        LRUCache<Integer, Integer> cache = new LRUCache<>(2);
        cache.put(1, 1);
        cache.put(2, 2);
        cache.get(1);
        cache.put(3, 3);
        cache.get(1);
        cache.put(4, 4);
        cache.get(1);
        cache.put(5, 5);
        System.out.println(cache);
    }
    

    输出:

    {1=1, 5=5}
    

    您可以在removeEldestEntry() 中实施删除策略。

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 2013-10-24
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多