Ich habe nach einer Java-Liste, einem Set oder ähnlichem Ausschau gehalten, deren Einträge nach einem bestimmten Zeitraum ablaufen, aber ich muss noch einen finden. Ich habe Guavas CacheBuilder
gefunden, was für mich fast perfekt wäre, aber dass es eher eine Karte als eine Liste oder ein Set ist. Gibt es da draußen schon etwas, oder muss ich eins machen, wenn ich es benutzen will?Java-Zeit abgelaufene Liste/Set?
Antwort
Da die Java HashSet-Implementierung intern eine HashMap verwendet, sollte es sehr einfach sein, den Code so zu kopieren/ändern, dass er Guavas CacheBuilder verwendet.
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;
...
Mit anderen Worten, implementieren nur Ihre SetWithExpiration
als CacheBuilder
Karte von Taste zu Taste. Dies wird nicht mehr Effizienz verlieren als die Java HashSet
Implementierung verliert durch Verwendung eines zugrunde liegenden HashMap
.
Nicht so einfach. Die "HashSet" -Klasse neu zu erfinden ist eine schlechte Idee, und Sie können "HashSet stattdessen nicht einfach einen CacheBuilder verwenden". – Bohemian
Ja, die cleane Code-Lösung wäre, AbstractSet zu erweitern und intern eine Map zu verwenden, die von der Abhängigkeitsinjektion weitergegeben wird . –
Um CacheBuilder
zu verwenden, um eine Zeit abgelaufen Liste zu erhalten, könnten Sie Ihre Objekte in der Karte als Schlüssel und einige Dummy-Objekt als Werte.
Oder verwenden Sie Ihre Objekte als Schlüssel und Wert. Achten Sie jedoch darauf, für jeden Dummy kein neues Objekt zu erstellen, da dies eine Verschwendung wäre. –
- 1. Feder Sicherheitsset abgelaufene URL
- 2. Abgelaufene Artikel verschieben?
- 3. AFNetworking SSL Pinning abgelaufene Zertifikate
- 4. Abgelaufene Prozesse, wenn Java Startterminalausführung
- 5. VS 2015 abgelaufene Lizenz (Systemdatum)
- 6. .NET - Ereignisüberlappung für abgelaufene Zeit
- 7. Abgelaufene Sitzungen: Sollte ich sie zufällig löschen?
- 8. [nodejs] Wie expressjs die abgelaufene Sitzung zerstören?
- 9. Konvertieren Abgelaufene Zeitstempel mit Logstash Float
- 10. Set Formular Authentifizierung Cookies abgelaufene Zeit
- 11. Abgelaufene oder widerrufene Signaturzertifikate mit Infopath-Dokumenten
- 12. Java 1.8: Abgelaufene Zeit threadsicher messen
- 13. Client über abgelaufene Sitzung benachrichtigen - Webprogrammierung
- 14. System.currentMillis zu keeptrackof abgelaufene Elemente in Java
- 15. Wie können abgelaufene Google Log-in-Logins aktualisiert werden?
- 16. MAMP PRO Abgelaufene jetzt kann ich meine Wordpress-App
- 17. ungültige oder abgelaufene Sicherheitskontext-Token in WCF Webservice
- 18. System.Timers.Timer zurücksetzen, um das abgelaufene Ereignis zu vermeiden
- 19. Wie behandelt man abgelaufene Routen/Sitzungen in Express?
- 20. R IBrokers API schlägt fehl, reqHistoricalData für abgelaufene Monate
- 21. Muss ich abgelaufene Verbindungen in Apache HTTPAsyncClient schließen?
- 22. Sitzungsregenerierung verursacht abgelaufene Sitzung mit schnellen AJAX-Aufrufen
- 23. Wie erstellt man eine abgelaufene Zeit in Javascript?
- 24. Wie kann ich eine abgelaufene ASP.NET-Sitzung am besten erkennen?
- 25. Wie wird die abgelaufene Zeit einer Funktion berechnet?
- 26. SUM() abgelaufene Zeit in Sql mit Text Datentyp
- 27. Abgelaufene Mongo-Daten mit TTL-Index und Datenwiederherstellungen
- 28. Gibt es eine Möglichkeit, die abgelaufene Zeit in der Timer-Funktion mit Matlab zu subtrahieren/summieren?
- 29. EhCache - Entfernen Sie abgelaufene Element (wegen TimeToIdleSeconds oder TimeToLiveSeconds) ohne versuchen, es zu bekommen?
- 30. Moose: Abgelaufene Ergebnisse von Berechnungen im Cache, wenn sich Attributwerte ändern?
Was ist Ihr Anwendungsfall? – Bohemian
Ich habe Schwierigkeiten, einen Anwendungsfall zu sehen. Wenn Sie Dinge zwischenspeichern möchten, benötigen Sie normalerweise einen Schlüssel zum Abrufen dessen, was zwischengespeichert wird. Daher funktioniert jede Cache-Implementierung mit der Map-Schnittstelle (oder etwas Ähnlichem). – Matt
können Sie immer noch über das Set iterieren –