我有一个简单的webapp项目,用户可以在其中输入搜索词并返回结果。我以为将最后n = 10的结果缓存在内存(它的FIFO)中以对其进行优化,但是不知道这样做的最佳方法。

我认为散列图由于其O(1)搜索而将是最好的,但是
例如,当您要存储第11个查询时,(同步)哈希图无法检查哪个是替换的第一个添加键;
和LinkedHashmap&Queues没有很好的快速.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(),是LinkedHashMap中的O(1) does it

07-26 01:13