Java 有限大小的哈希表?
为了管理一些缓存,我需要一种能够删除最旧元素的哈希表,以便将MAXSIZE last元素保留在表中。我需要用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
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,它提供了一个选项。请注意,这种行为比您可能要寻找的行为更加微妙:
指定缓存可能包含的最大条目数。笔记
缓存可能会在超过此限制之前逐出条目。像
缓存大小接近最大值时,缓存将逐出条目
它们不太可能被再次使用。例如,高速缓存可以
逐出条目,因为它最近或经常未被使用
考虑使用番石榴,它提供了一个更好的选择。请注意,这种行为比您可能要寻找的行为更加微妙:
指定缓存可能包含的最大条目数。笔记
缓存可能会在超过此限制之前逐出条目。像
缓存大小接近最大值时,缓存将逐出条目
它们不太可能被再次使用。例如,高速缓存可以
逐出条目,因为它最近或经常未被使用
你想要一个。当映射变得太大时,您必须添加一些钩子来删除条目。您需要一个钩子。当地图变得太大时,你必须添加一些钩子来删除条目。所有答案都是干净的,但我选择了你的方法。所有答案都是干净的,但我选择了你的方法。