java - 如何实现最近使用的缓存

标签 java algorithm caching java-me mru

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

以下是要求和限制...

  • 对象存储为键/值对象/对象对,因此接口(interface)有点像 Hashtable get/put
  • 调用“get”会将该对象标记为最近使用的对象。
  • 可以随时从缓存中清除最近最少使用的对象。
  • 查找和清除必须很快(就像在哈希表中一样快)
  • 对象的数量可能很大,因此列表查找不够好。
  • 必须使用 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它允许您指定是否希望类通过插入或使用按顺序存储内容,因此您的逐出策略也具有一定的灵 active :

public LinkedHashMap(int initialCapacity,
                     float loadFactor,
                     boolean accessOrder)

传递 true 表示使用顺序,传递 false 表示插入顺序。

关于java - 如何实现最近使用的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58073539/

相关文章:

java - 在 Java 中搜索子字符串的最快方法是什么?

java - 构建图形数组

java - Java 中 Finalize() 操作的顺序

java - Spring 3 + JPA + TomCat 7

caching - Cache-Control 的无缓存和必须重新验证之间的区别?

caching - Coldfusion 缓存后和缓存内建议

caching - Grails ehcache 插件缓存未过期

java - 数据库中最后插入行的值

algorithm - 用字母表表示一个单词

c - 当所有元素都相同时快速排序复杂度?