2012-02-20 129 views
7

是否有一些支持元素到期的集合實現?具有元素超時的Java集合實現

例如:

Collection<User> cachedUsers = new ExpirableList<User>(10000); 

其中

public ExpirableList(final long timeout){...} 

而給定的時間(10000ms在此特定示例中)後,添加元素會從集合中移除。通過使用這個,我們將防止我們的cachedUsers收集溢出。

+0

看起來你正在尋找...緩存:http://stackoverflow.com/questions/9352864 – 2012-02-20 15:27:35

回答

9

是,番石榴支持具有定時到期的高速緩存。請參閱Guava Explained's page on caches

另一種方法是一個LRU(最近最少使用)緩存,它在插入新元素時處理最早訪問的元素。

2

你可以通過編寫一個包裝,例如TreeMap來讓插入時間成爲關鍵。在每次插入時,您可以刪除「超時」的頭部列表。

雖然使用插入時間作爲是否應該放棄的指示似乎是一個壞主意。例如,最好使用一些LRU(最近最少使用的)緩存。這樣的高速緩存在例如EHCache的庫中是容易獲得的。 不要重新發明輪子。

相關問題:

+0

犯的插入,同時是非常罕見的,AIN他們呢? – 2012-02-20 15:35:24

+0

哈哈。好點子。解決方案顯然是讓每個時間戳映射到一組對象:-) – aioobe 2012-02-20 15:37:39

3

你不太清楚你如何使用這個系列,但番石榴的CacheBuilder可能會幫助你。

2

另一種方法是ExpiringMap

Map<String, User> users = ExpiringMap.builder() 
    .expiration(10, TimeUnit.SECONDS) 
    .build(); 
相關問題