java - 缓存最后 n 个查询结果的最有效方法?

标签 java hashmap

我有一个简单的 web 应用程序项目,用户可以在其中输入搜索词并返回结果。我想将最后 n = 10 个结果缓存在内存中(它是 FIFO)来优化它,但不知道最好的方法。

我认为 HashMap 是最好的,因为它们的搜索时间复杂度为 O(1),但是 (同步)例如,当您要存储第 11 个查询时,Hashmap 无法检查哪个是第一个添加的要替换的键; LinkedHashmap 和队列没有好的快速 .contains() 方法。

有什么好的方法可以在java中缓冲最后n个结果吗?

最佳答案

看来你需要一个 LRU 缓存,它可以很容易地在 LinkedHashMap 之上实现。复制自here :

import java.util.LinkedHashMap;
import java.util.Map;

public LRUCache<K, V> extends LinkedHashMap<K, V> {
  private int cacheSize;

  public LRUCache(int cacheSize) {
    super(16, 0.75, true);
    this.cacheSize = cacheSize;
  }

  protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
    return size() >= cacheSize;
  }
}

只需使用 cacheSize = 10 实例化它即可适合您的用例。至于contains()LinkedHashMapdoes itO(1)中。

关于java - 缓存最后 n 个查询结果的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923348/

相关文章:

java - 无法通过按位运算获得长整型值

java - 为许多不同的配置文件集测试一个 Spring 测试类

c++ - 为什么map在(switch)格外变成空的?

java - LinkedHashMap 按值排序

java - InsufficientAuthenticationException : There is no client authentication. 尝试添加适当的身份验证过滤器

java - 使用 JDBC Statement 或PreparedStatement 执行一组查询

java - db2 驱动程序为smallint 返回java.lang.Integer

java HashMap : Get the key with maximum number of values

java - 在 Java 中查找字谜

java - 哈希集如何避免重复