4 Stimmen

welche Java-Sammlungen (und Maps) nach dem letzten Zugriff sortiert werden können

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?

4voto

Douglas Punkte 1283

Ich glaube, ich verstehe die Frage nicht ganz, aber vielleicht wollen Sie ja mal einen Blick in die LRUMap Umsetzung der Gemeinsame Sammlungen Rahmen.

1voto

Sean Patrick Floyd Punkte 283617

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X