2012-03-28 66 views
1

爲了管理一些緩存,我需要一種能夠移除最舊元素的哈希表,以便將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); 
} 

任何想法?

回答

3

我所知道的唯一方法是在你的哈希鍵的隊列中,並用它來驅逐當表&隊列受到太大

+0

所有的答案都很乾淨,但我選擇了你的方法。 – Joel 2012-03-30 12:48:16

4

LinkedHashMap與看一看鍵的覆蓋removeEldestEntry - 如果它返回size() > MAXSIZE,你會得到你想要的。 LinkedHashMap之一的構造函數也有一個布爾值,表示「最早的」條目是指最長添加的條目,還是最長訪問時間最長的條目。

3

考慮使用Guava的CacheBuilder,其中提供maximumSize()等選項。請注意,此行爲比您要查找的內容更細微:

指定緩存可能包含的最大條目數。注意 高速緩存可能在超出此限制之前驅逐條目。由於 高速緩存大小增長接近最大值,因此高速緩存會刪除不太可能再次使用的條目 。例如,高速緩存可能會刪除一個條目,因爲它最近還沒有被使用或經常使用。

1

你想要一個LinkedHashMap。當地圖變得太大時,您必須添加一些鉤子來刪除條目。