Hashtable有限的尺寸?

时间:2012-03-28 21:51:17

标签: java algorithm data-structures hashtable

为了管理一些缓存,我需要一种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);
}

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

使用被覆盖的removeEldestEntry来查看LinkedHashMap - 如果它返回size() > MAXSIZE,您将拥有所需的内容。 LinkedHashMap的一个构造函数也有一个布尔值,表示“最旧的”条目是指最久前添加的条目,还是最久前访问的条目。

答案 1 :(得分:3)

我知道的唯一方法是在哈希中保留密钥队列,并在表格和表格中使用它来排除密钥。队列变得太大了

答案 2 :(得分:3)

考虑使用Guava的CacheBuilder,它提供maximumSize()等其他选项。请注意,此行为比您可能要查找的内容更细微:

  

指定缓存可能包含的最大条目数。注意   缓存可能会在超出此限制之前逐出条目。如   缓存大小接近最大值,缓存逐出条目   不太可能再次使用。例如,缓存可以   因为最近或经常没有使用它而逐出一个条目。

答案 3 :(得分:1)

你想要一个LinkedHashMap

,当地图变得过大时,你必须添加一些钩子来删除条目。