我有一个简单的 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()
,LinkedHashMap
does it在O(1)
中。
关于java - 缓存最后 n 个查询结果的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38923348/