2012-07-23 77 views
11

我一直在四處尋找一個Java列表,集合或類似的東西在給定的時間段後有條目到期,但我還沒有找到。我發現番石榴的CacheBuilder,這對我來說幾乎是完美的,但它是一個地圖而不是一個列表或集合。有沒有像這樣的東西,或者如果我想使用它,我將不得不做出一個?Java時間到期列表/設置?

+2

你的用例是什麼? – Bohemian 2012-07-24 00:24:33

+0

我很難看到一個用例。通常,當你想要緩存某些東西時,你需要一個密鑰來檢索緩存的內容,這就是爲什麼每個緩存實現都與Map接口(或類似的東西)一起工作的原因。 – Matt 2012-07-24 00:57:44

+0

你仍然可以遍歷集合 – 2012-07-24 01:21:41

回答

0

由於Java HashSet實現在內部使用了一個HashMap,所以它應該很容易複製/修改代碼,以便它使用Guavas CacheBuilder。

public class HashSet<E> 
    extends AbstractSet<E> 
    implements Set<E>, Cloneable, java.io.Serializable 
{ 
    static final long serialVersionUID = -5024744406713321676L; 

    private transient HashMap<E,Object> map; 
... 

換句話說,只是實現您SetWithExpiration從鍵鍵CacheBuilder地圖。這將失去更多的效率比Java HashSet實施失去了通過使用基礎HashMap

+3

不是那麼簡單。重新發明'HashSet'類是一個不好的主意,你不能只是「使HashSet使用CacheBuilder」代替, – Bohemian 2012-07-24 00:24:02

+0

是的,乾淨的代碼解決方案將擴展AbstractSet並在內部使用依賴注入傳遞的Map 。 – 2012-07-24 01:39:09

5

要使用CacheBuilder獲取時間過期列表,您可以將對象作爲鍵放入地圖中,並將某些虛擬對象作爲值放入。

+1

或使用您的對象作爲鍵和值。只要注意不要爲每個假人創建一個新對象,因爲那樣會浪費。 – 2015-04-06 09:19:24