实现最近使用的对象缓存的最佳方法是什么?

这里是要求和限制...

  • 对象存储为键/值对象/对象对,因此接口(interface)有点像Hashtable get/put
  • 调用“get”会将该对象标记为最近使用的对象。
  • 任何时候都可以从缓存中清除最近最少使用的对象。
  • 查找和清除必须快速(就像在Hashtable中一样)
  • 对象的数量可能很大,因此列表查找不够好。
  • 该实现必须使用JavaME进行,因此使用第三方代码或标准Java库中的整洁库类的空间很小。 出于这个原因,我正在寻找更多算法答案,而不是现成的解决方案的建议。
  • 最佳答案

    Java集合开箱即用提供LinkedHashMap,非常适合构建缓存。您可能在Java ME中没有此功能,但是您可以在此处获取源代码:

    http://kickjava.com/src/java/util/LinkedHashMap.java.htm

    如果您不能只是将其复制粘贴,那么查看它应该可以使您开始实现将其包含在移动应用程序中的功能。基本思想只是通过 map 元素包括一个链表。如果您在有人放置或获取物品时保持此更新,则可以有效地跟踪访问顺序和使用顺序。

    该文档包含有关通过覆盖 removeEldestEntry(Map.Entry) 方法构建MRU缓存的说明。您真正要做的就是创建一个扩展LinkedHashMap并覆盖如下方法的类:

    private static final int MAX_ENTRIES = 100;
    
    protected boolean removeEldestEntry(Map.Entry eldest) {
       return size() > MAX_ENTRIES;
    }
    

    还有一个constructor,您可以指定是否要让该类通过插入还是使用来按顺序存储内容,因此,您的驱逐策略也有一点灵活性:
    public LinkedHashMap(int initialCapacity,
                         float loadFactor,
                         boolean accessOrder)
    

    传递为用于使用顺序,将传递为用于插入顺序。

    09-30 15:06
    查看更多