簡體   English   中英

哈希表大小有限?

[英]Hashtable with limited size?

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

任何想法?

看看具有重寫的removeEldestEntry LinkedHashMap -如果它返回size() > MAXSIZE ,您將擁有所需的內容。 LinkedHashMap的構造函數之一還具有一個布爾值,該布爾值表示“最舊”條目是指添加時間最久的條目,還是表示訪問時間最久的條目。

我知道的唯一方法是在哈希表中保留鍵隊列,並在表和隊列太大時使用它來排出鍵

考慮使用Guava的CacheBuilder ,它在其他選項中提供了maximumSize() 請注意,此行為比您要尋找的行為更加細微:

指定高速緩存可以包含的最大條目數。 請注意,在超出此限制之前,高速緩存可能會逐出一個條目。 隨着高速緩存大小逐漸接近最大值,高速緩存逐出了不太可能再次使用的條目。 例如,高速緩存可能會逐出一個條目,因為該條目最近或被很少使用。

您需要一個LinkedHashMap 當地圖太大時,您必須添加一些鈎子才能刪除條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM