2012-02-20 12 views
7

Esiste qualche implementazione di raccolta che supporta la scadenza degli elementi.Implementazione di Java Collection con timeout degli elementi

Ad esempio:

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

dove

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

E dopo tempo determinato (10000ms in questo particolare esempio), elementi aggiunti saranno rimossi dalla raccolta. Usando questo, eviteremo l'overflow della nostra collezione cachedUsers.

+0

Sembra che siete alla ricerca di ... una cache: http://stackoverflow.com/questions/9352864 –

risposta

9

Sì, Guava supporta una cache con scadenza temporizzata. Vedi Guava Explained's page on caches.

Un'alternativa è una cache LRU (utilizzata meno di recente) che dispone dell'elemento di accesso più vecchio quando viene inserito un nuovo elemento.

2

È possibile implementarlo scrivendo un wrapper per, ad esempio, un TreeMap in cui si lascia che il tempo di inserimento sia la chiave. Su ciascun inserto, è possibile eliminare l'elenco principale che ha "scaduto".

L'utilizzo del tempo di inserimento come indicazione sull'opportunità o meno di cadere dovrebbe sembrare una cattiva idea. Ad esempio, sembra preferibile utilizzare una cache LRU (utilizzata meno di recente). Tali cache sono prontamente disponibili in librerie come ad esempio EHCache. Non reinventare la ruota.

domande correlate:

+0

inserimenti commessi allo stesso tempo sono molto rare, ain sono loro? –

+0

Haha. Buon punto La soluzione è ovviamente quella di far mappare ogni timestamp a un insieme di oggetti :-) – aioobe

3

Non è molto chiaro come si sta tentando di utilizzare la raccolta, ma Guava di CacheBuilder potrebbe essere di aiuto.

2

Un'altra alternativa è ExpiringMap:

Map<String, User> users = ExpiringMap.builder() 
    .expiration(10, TimeUnit.SECONDS) 
    .build(); 
Problemi correlati