2012-02-20 7 views
7

要素の有効期限をサポートするコレクション実装がありますか?例えば要素のタイムアウトを伴うJava Collection implementaiton

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

ここ

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

一定時間後(この特定の例で10000ms)、添加元素は、コレクションから削除されます。これを使用して、cachedUsersコレクションのオーバーフローを防止します。

+0

が見える:http://stackoverflow.com/questions/9352864同時にコミット –

答えて

9

はい、グアバは、時限式の有効期限とキャッシュをサポートしています。 Guava Explained's page on cachesを参照してください。

代替案は、新しい要素が挿入されたときにアクセスされた最も古い要素を廃棄するLRU(least-recently used)キャッシュです。

2

たとえば、挿入時間をキーにするTreeMapのラッパーを記述することで実装できます。各インサートで、 "タイムアウト"したヘッドリストを削除することができます。

挿入時間を表示するかどうかは、削除する必要があるかどうかを示す指標として使用することは悪い考えです。たとえば、LRU(least recently used)キャッシュを使用する方が良いでしょう。このようなキャッシュは、例えばEHCacheのようなライブラリで容易に利用可能である。 ホイールを改造しないでください。

関連質問:

+0

挿入は、AIN非常に稀です彼ら? –

+0

ハハ。いい視点ね。解決策は明らかに各タイムスタンプを一連のオブジェクトにマップさせることです:-) – aioobe

3

コレクションをどのように使用しようとしているのかはっきりしませんが、GuavaのCacheBuilderがお手伝いします。

2

別の方法としては、ExpiringMapです:あなたは...キャッシュを探しているよう

Map<String, User> users = ExpiringMap.builder() 
    .expiration(10, TimeUnit.SECONDS) 
    .build(); 
関連する問題