Java 有限大小的哈希表?

Java 有限大小的哈希表?,java,algorithm,data-structures,hashtable,Java,Algorithm,Data Structures,Hashtable,为了管理一些缓存,我需要一种能够删除最旧元素的哈希表,以便将MAXSIZE last元素保留在表中。我需要用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); } 公共接口限制哈希表{ v

为了管理一些缓存,我需要一种能够删除最旧元素的哈希表,以便将MAXSIZE last元素保留在表中。我需要用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);
}
公共接口限制哈希表{
void put(K,V);//如果size>MAXSIZE,将从表中删除最旧的元素
V-get(K);
}

有什么想法吗?

我知道的唯一方法是在哈希表中保留一个键队列,并在表和队列变得太大时使用该队列排出键

我知道的唯一方法是在哈希表中保留一个键队列,当表和队列变得太大时,使用它来排除键

使用重写的
removeEldestEntry
——如果它返回
size()>MAXSIZE
,您将得到您想要的。
LinkedHashMap
的一个构造函数也有一个布尔值,表示“最早的”条目是指最早添加的条目,还是指最早访问的条目。

使用重写的
RemoveedStantry
——如果它返回
size()>MAXSIZE
,您将得到想要的。
LinkedHashMap
的一个构造函数也有一个布尔值,表示“最早”的条目是指添加时间最长的条目,还是指访问时间最长的条目。

考虑使用Guava's,它提供了一个选项。请注意,这种行为比您可能要寻找的行为更加微妙:

指定缓存可能包含的最大条目数。笔记 缓存可能会在超过此限制之前逐出条目。像 缓存大小接近最大值时,缓存将逐出条目 它们不太可能被再次使用。例如,高速缓存可以 逐出条目,因为它最近或经常未被使用

考虑使用番石榴,它提供了一个更好的选择。请注意,这种行为比您可能要寻找的行为更加微妙:

指定缓存可能包含的最大条目数。笔记 缓存可能会在超过此限制之前逐出条目。像 缓存大小接近最大值时,缓存将逐出条目 它们不太可能被再次使用。例如,高速缓存可以 逐出条目,因为它最近或经常未被使用


你想要一个。当映射变得太大时,您必须添加一些钩子来删除条目。

您需要一个钩子。当地图变得太大时,你必须添加一些钩子来删除条目。

所有答案都是干净的,但我选择了你的方法。所有答案都是干净的,但我选择了你的方法。