我有一个简单的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。