为了管理一些缓存,我需要一种Hashtable,它能够删除最旧的元素,以保持MAXSIZE表中的最后一个元素。我需要用Java编程,但任何带伪代码的算法也都可以。
public interface LimitedHashtable<K, V> {
void put(K k, V v); // will remove the oldest element from the table if size > MAXSIZE
V get(K k);
}
有什么想法吗?
答案 0 :(得分:4)
使用被覆盖的removeEldestEntry
来查看LinkedHashMap - 如果它返回size() > MAXSIZE
,您将拥有所需的内容。 LinkedHashMap
的一个构造函数也有一个布尔值,表示“最旧的”条目是指最久前添加的条目,还是最久前访问的条目。
答案 1 :(得分:3)
我知道的唯一方法是在哈希中保留密钥队列,并在表格和表格中使用它来排除密钥。队列变得太大了
答案 2 :(得分:3)
考虑使用Guava的CacheBuilder
,它提供maximumSize()
等其他选项。请注意,此行为比您可能要查找的内容更细微:
指定缓存可能包含的最大条目数。注意 缓存可能会在超出此限制之前逐出条目。如 缓存大小接近最大值,缓存逐出条目 不太可能再次使用。例如,缓存可以 因为最近或经常没有使用它而逐出一个条目。
答案 3 :(得分:1)
你想要一个LinkedHashMap。
,当地图变得过大时,你必须添加一些钩子来删除条目。