Ich möchte ein LRU cache
implementieren, wo die zuletzt verwendeten Elemente asynchron gelöscht werden. Meine derzeitige Idee ist es, eine Dictionary
zu verwenden, um die <key,value>
Paare zu speichern und die Zeiten der Zugriffe der Objekte zu verfolgen, um eine SortedDictionary <key, timestamp>
zu behalten. Die Idee ist, dass der asynchrone Thread die LRU-Elemente von SortedDictionary
erhält und aus dem Cache entfernt. Aber damit dies funktioniert, muss SortedDictionary
nach Wert sortiert werden, was nicht der Fall ist.Sortiertes Wörterbuch sortiert nach Wert in C# (LRU-Cache)
ich die {Schlüssel und Zeitstempel} sortierten für das Halt auf dem Zeitstempel ein separates SortedList
anstelle die SortedDictionary
verwendet haben könnte, aber dann werde ich einen „linearen“ Nachschlag für die Suche nach dem Schlüssel aus der Liste tun (wenn Ich muss den Zeitstempel aktualisieren, wenn derselbe Schlüssel wieder aufgerufen wird) - ich suche nach einem besseren als linearen Weg, wenn möglich. Kann jemand Ideen teilen, um mit diesem Problem umzugehen?
So kocht mein Problem unten zu diesem:
Ich habe Tasten in < = logn Zeit zum Nachschlagen für die Aktualisierung des Zeitstempels, während zur gleichen Zeit in der Lage die Schlüssel zu erhalten, auf dem Zeitstempel sortierte, basiert.
Ein Weg, der gedacht wurde, war, einen SortedDictionary
von <{key,timestamp},null>
zu behalten, der die Schlüssel bestellt, die auf dem Timestampteil von {Schlüssel, timestamp} basieren. Während das in Ordnung ist, ist das Problem hashcode()
wird nur key.hashcode() (für die Suche während der Aktualisierung Zeitstempel) zurückgeben, während equals()
sollte auch timestamp verwenden. Also, und hashcode()
sind in Konflikt, so fühlte, dass dies keine gute Idee ist ...
Mit anderen Worten, Sie möchten, dass SortedDic wie eine Prioritätswarteschlange agiert, in der die Priorität durch den Zeitstempel definiert ist? Was ist falsch an SortedDictionary? Und BTW ist es nicht O (1) es ist O (logn) - es ist wahrscheinlich als Rot-Schwarz-Baum implementiert. –