4 Stimmen

java ständig sortierte Liste mit schnellem Abruf

Ich bin auf der Suche nach einer ständig sortierten Liste in Java, die auch verwendet werden kann, um ein Objekt sehr schnell abzurufen. PriorityQueue funktioniert großartig für die "ständig sortiert" Anforderung, und HashMap funktioniert großartig für die schnelle Abfrage nach Schlüssel, aber ich brauche beide in der gleichen Liste. An einem Punkt hatte ich meine eigene geschrieben, aber es implementiert nicht die Sammlungen Schnittstellen (so kann nicht als Drop-in-Ersatz für eine java.util.List usw. verwendet werden), und ich würde lieber zu Standard-Java-Klassen bleiben, wenn möglich.

Gibt es eine solche Liste? Im Moment verwende ich 2 Listen, eine Prioritäts-Warteschlange und eine Hashmap, beide enthalten die gleichen Objekte. Ich verwende die Prioritäts-Warteschlange, um den ersten Teil der Liste in sortierter Reihenfolge zu durchlaufen, die Hashmap für die schnelle Abfrage nach Schlüssel (ich muss beide Operationen austauschbar tun), aber ich hoffe auf eine elegantere Lösung...

Bearbeiten: Ich sollte hinzufügen, dass ich die Liste durch einen anderen Komparator als das, was für die Abfrage nach Schlüssel verwendet wird, sortiert haben müssen; die Liste wird durch einen langen Wert sortiert, die Schlüsselabfrage ist ein String.

0voto

Hardcoded Punkte 6306

Warum kapseln Sie Ihre Lösung nicht in einer Klasse, die Collection oder Map implementiert?
Auf diese Weise könnten Sie die Abrufmethoden einfach an die schnellere/besser geeignete Sammlung delegieren. Stellen Sie nur sicher, dass Aufrufe von Schreibmethoden (Hinzufügen/Entfernen/Einfügen) an beide Sammlungen weitergeleitet werden. Denken Sie an indirekte Zugriffe, wie iterator.remove(). Die meisten dieser Methoden sind optional zu implementieren, aber Sie müssen sie deaktivieren (Collections.unmodifiableXXX hilft hier in den meisten Fällen).

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