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?
risposta
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
.
Non così semplice. Re-inventare la classe 'HashSet' è una cattiva idea, e non puoi semplicemente" rendere HashSet usare un CacheBuilder invece " – Bohemian
sì, la soluzione del codice pulito sarebbe estendere AbstractSet e usare internamente una mappa che è passata per iniezione di dipendenza . –
Per utilizzare CacheBuilder
per ottenere un elenco scaduto, è possibile inserire i propri oggetti nella mappa come chiavi e alcuni oggetti fittizi come valori.
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. –
- 1. CurlException: 28: connect() scaduto?
- 2. Timeout scaduto con SqlBulkCopy
- 3. PHP max_execution_time non è scaduto
- 4. accesso facebook di token scaduto
- 5. GcWatcher.finalize scaduto dopo 10 secondi
- 6. com.android.sdklib.build.ApkCreationException: Errore debug certificato scaduto
- 7. GetBufferLock scaduto per il thread
- 8. Ottieni valore scaduto con Jedis
- 9. Il server SQl continua a ricevere l'errore "Timeout scaduto. Il periodo di timeout è scaduto"
- 10. Google restituisce sempre gettone id scaduto (JWT)
- 11. Certificato ClickOnce scaduto - non firma manifest
- 12. Gestione account manager android token scaduto
- 13. Tentativo di aggiornare il keystore "scaduto"
- 14. .NET 4.0 Timeout del framework Entity scaduto
- 15. Il certificato Puppet Master-Client è scaduto?
- 16. Nessun profilo di provisioning non scaduto trovato
- 17. Come posso sapere quando HttpClient è scaduto?
- 18. garbo gestire HttpSession scaduto nella primavera WebFlow
- 19. Come avvisare quando Session (JWT) è scaduto in React/Redux
- 20. Gestione di un ViewState scaduto in JSF e Richfaces
- 21. Perché il mio tempo() è scaduto di un'ora in php?
- 22. Java SSL/TLS ignora il cert scaduto? (java.security.cert.CertPathValidatorException: controllo timestamp non riuscito)
- 23. proxy_ajp: errore (70007) Il timeout specificato è scaduto:
- 24. Come dire programmaticamente quando FINGERPRINT_ERROR_LOCKOUT è scaduto su Android FIngerprintManager?
- 25. Errore di restituzione per token non valido o scaduto
- 26. Il caricamento del file AngularJS invia il modulo scaduto Dati
- 27. EasyNetQ non riesce a pubblicare su RabbitMQ - PersistentChannel scaduto
- 28. come testare se un cookie javascript è scaduto?
- 29. iOS Swift: come trovare se è scaduto un NSURLSession
- 30. Android Studio - SDK è scaduto o mancante modelli
Qual è il tuo caso d'uso? – Bohemian
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
puoi ancora scorrere il Set –