2012-07-23 18 views
11

Ho cercato un elenco Java, un set o qualcosa di simile in cui le voci scadono dopo un determinato periodo di tempo, ma devo ancora trovarne una. Ho trovato Guava CacheBuilder, che sarebbe quasi perfetto per il mio uso, ma che è una mappa piuttosto che una lista o un set. C'è già qualcosa là fuori in questo modo, o dovrò farne uno se voglio usarlo?Elenco/scadenza scaduto in Java?

+2

Qual è il tuo caso d'uso? – Bohemian

+0

Ho difficoltà a vedere anche un caso d'uso. In genere, quando si desidera memorizzare nella cache le cose, è necessaria una chiave per recuperare ciò che viene memorizzato nella cache, quindi perché ogni implementazione della cache funziona con l'interfaccia Mappa (o qualcosa di simile). – Matt

+0

puoi ancora scorrere il Set –

risposta

0

Poiché l'implementazione di HashSet Java utilizza internamente una HashMap, dovrebbe essere veramente facile copiare/modificare il codice in modo che utilizzi 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; 
... 

In altre parole, basta implementare il SetWithExpiration come una cartina CacheBuilder da un tasto all'altro. Ciò non perderà più efficienza rispetto all'implementazione di Java HashSet utilizzando un sottostante HashMap.

+3

Non così semplice. Re-inventare la classe 'HashSet' è una cattiva idea, e non puoi semplicemente" rendere HashSet usare un CacheBuilder invece " – Bohemian

+0

sì, la soluzione del codice pulito sarebbe estendere AbstractSet e usare internamente una mappa che è passata per iniezione di dipendenza . –

5

Per utilizzare CacheBuilder per ottenere un elenco scaduto, è possibile inserire i propri oggetti nella mappa come chiavi e alcuni oggetti fittizi come valori.

+1

Oppure usa i tuoi oggetti come chiave e valore. Fai solo attenzione a non creare un nuovo oggetto per ogni manichino, poiché sarebbe uno spreco. –

Problemi correlati