Zugriff auf den letzten Eintrag in einer Map
Gewusst wie: verschieben einer bestimmten HashMap-Eintrag an die Letzte position?
Ich habe zum Beispiel HashMap Werte wie diese:
HashMap<String,Integer> map = new HashMap<String,Integer>();
map= {Not-Specified 1, test 2, testtest 3};
"Nicht-Angegeben" kommen kann, in jeder position. es kann kommen ersten oder in der Mitte der Karte. Aber ich will mich der "Nicht-Angegeben" an die Letzte position.
Wie kann ich das tun? vielen Dank im Voraus.
Kommentar zu dem Problem
Können Sie erklären, warum Sie dies tun wollen? Vielleicht mit Hilfe einer HashMap ist nicht die beste Lösung für Ihr problem.
Siehe auch stackoverflow.com/questions/1936462/...
InformationsquelleAutor der Frage Gnaniyar Zubair | 2010-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beantworten Ihre Frage in einem Satz:
Standardmäßig Maps nicht über einen letzten Eintrag, es ist nicht Teil Ihres Vertrags.
Und eine Anmerkung: es ist gute Praxis, Kodex gegen Schnittstellen, nicht der Implementierung-Klassen (siehe Effektive Java von Joshua Bloch, Kapitel 8, Punkt 52: Beziehen sich auf Objekte, die durch Ihre Schnittstellen).
So Ihre Erklärung sollte lauten:
(Alle Karten teilen sich einen gemeinsamen Vertrag, so dass der client nicht wissen muss, welche Art von Karte es ist, es sei denn, er legt eine sub-Schnittstelle mit einer erweiterten Vertrag).
Mögliche Lösungen
Sortiert Karten:
Es ist eine sub-Schnittstelle SortedMap, erstreckt sich der map-Schnittstelle mit, um-basierend lookup-Methoden, und es hat ein sub-interface NavigableMap , reicht es sogar noch weiter. Die standard-Implementierung dieser Schnittstelle, TreeMap, können Sie die Einträge Sortieren, entweder durch die Natürliche Ordnung (wenn Sie die Anwendung der Vergleichbar - Schnittstelle) oder durch ein mitgeliefertes Komparator.
Können Sie auf den letzten Eintrag durch den lastEntry Methode:
Verknüpfte maps:
Gibt es auch den speziellen Fall der LinkedHashMap, ein HashMap-Implementierung, in der Reihenfolge, in der die Schlüssel eingefügt werden. Es ist jedoch keine Schnittstelle zum sichern dieser Funktionalität, noch gibt es eine direkte Möglichkeit zum Zugriff auf die Letzte Taste. Sie können nur tun es durch tricks wie die Verwendung einer Liste in zwischen:
Richtige Lösung:
Da Sie keinen Einfluss auf die Einfügemarke, um Sie gehen sollte mit der Schnittstelle NavigableMap, d.h. schreiben Sie ein Komparator, die Positionen der
Not-Specified
letzten Eintrag.Hier ist ein Beispiel:
Ausgabe:
Lösung mit HashMap:
Wenn Sie müssen verlassen sich auf HashMaps, es gibt noch eine Lösung, bei der a) eine modifizierte version der oben genannten Komparator, b) eine Liste initialisiert mit der Karte entrySet und c) die Sammlungen.sort() Helfer-Methode:
Ausgabe:
InformationsquelleAutor der Antwort
HashMap nicht "die Letzte position", es ist nicht sortiert.
Können auch andere
Map
implementiertjava.util.SortedMap
meisten beliebt istTreeMap
.InformationsquelleAutor der Antwort 卢声远 Shengyuan Lu
Einen
SortedMap
ist die logische/beste Wahl, allerdings eine andere Möglichkeit ist die Verwendung einesLinkedHashMap
die behauptet, um zwei Modi, zuletzt Hinzugefügt, geht, Letzte, und am meisten kürzlich zugegriffen wurde, geht letzten. Siehe Javadocs für mehr details.InformationsquelleAutor der Antwort Peter Lawrey
verschieben macht keinen Sinn, für eine hashmap seit seiner ein Wörterbuch mit einem hashcode für giesst, basierend auf Schlüssel und dann eine verknüpfte Liste für die Kollision hashcodes gelöst über gleich.
Verwenden Sie eine TreeMap sortiert für Karten und übergeben Sie dann in eine benutzerdefinierte Komparator.
InformationsquelleAutor der Antwort anand
Bei der Verwendung von zahlen als Schlüssel, ich vermute, Sie könnten auch versuchen, diese:
InformationsquelleAutor der Antwort Yoshua Nahar