Ich weiß, dass die LinkedHashMap bietet einen Konstruktor, in dem Sie angeben können, ob die Karte nach der Zugriffsreihenfolge sortiert werden soll, wodurch eine LRU-Implementierung entsteht. Können Sie mir sagen, welche (und ob) andere Collections und Maps aus dem großen Collections-Zoo diese Funktion bieten?
Antworten
Zu viele Anzeigen?Ich glaube, ich verstehe die Frage nicht ganz, aber vielleicht wollen Sie ja mal einen Blick in die LRUMap Umsetzung der Gemeinsame Sammlungen Rahmen.
Ich glaube nicht, dass es solche Collections oder Maps gibt (aber ich habe auch gerade zum ersten Mal von diesem Konstruktor gehört). Ich habe geprüft Guave aber ich glaube auch nicht, dass sie eine Lösung haben.
Ich denke aber, dass dies mit dem Dekorationsmuster leicht möglich ist. Schreiben Sie ein Delegate-Objekt, das die gewünschte Schnittstelle implementiert und alle Methoden an ein inneres Objekt delegiert. Ihr Wrapper enthält auch ein LinkedHashSet / LinkedHashMap (je nachdem, ob es sich um eine Sammlung oder eine Karte handelt), das den Datenzugriff protokolliert.
Jetzt bieten Ihre Iterator()/EntrySet()-Methoden eine Ansicht, die zuerst durch das LinkedHashSet/Map und dann durch den Rest der Daten unterstützt wird (oder umgekehrt, wenn Sie die Zugriffsreihenfolge umkehren möchten).
Ich würde es mit Wrapper-Methoden wie die in der Klasse Collections implementieren.
z.B.
Map<String,String> map = CollectionUtils.viewMapByAccessOrder(
new HashMap<String,String>());
List<String> list = CollectionUtils.viewListByAccessOrder(
new ArrayList<String>());
Dies könnte tatsächlich eine Funktion sein, die für ein größeres Publikum sinnvoll ist. Ich würde in Erwägung ziehen, einen Feature Request in der Guave Projekt.