Kurze Antwort
Verwenden Sie a TreeMap
. Genau dafür ist es.
Wenn diese Karte an Sie übergeben wird und Sie den Typ nicht bestimmen können, können Sie Folgendes tun:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
Dies wird in der natürlichen Reihenfolge der Schlüssel über die Karte iteriert.
Längere Antwort
Technisch gesehen können Sie alles verwenden, was implementiert wird SortedMap
, aber in seltenen Fällen beträgt dies TreeMap
genau so, wie es bei der Verwendung einer Map
Implementierung normalerweise der Fall ist HashMap
.
In Fällen, in denen Ihre Schlüssel ein komplexer Typ sind, der Comparable nicht implementiert, oder Sie dann nicht die natürliche Reihenfolge verwenden möchten TreeMap
und TreeSet
über zusätzliche Konstruktoren verfügen, mit denen Sie Folgendes übergeben können Comparator
:
// placed inline for the demonstration, but doesn't have to be a lambda expression
Comparator<Foo> comparator = (Foo o1, Foo o2) -> {
...
}
SortedSet<Foo> keys = new TreeSet<>(comparator);
keys.addAll(map.keySet());
Denken Sie bei der Verwendung eines TreeMap
oder daran, TreeSet
dass es andere Leistungsmerkmale als HashMap
oder aufweist HashSet
. Grob gesagt gehen Operationen, die ein Element finden oder einfügen, von O (1) nach O (Log (N)) .
In a HashMap
wirkt sich das Verschieben von 1000 auf 10.000 Elemente nicht wirklich auf Ihre Zeit zum Nachschlagen eines Elements aus, aber für a ist TreeMap
die Nachschlagezeit etwa dreimal langsamer (unter der Annahme von Protokoll 2 ). Das Verschieben von 1000 auf 100.000 ist bei jeder Elementsuche etwa sechsmal langsamer.
Angenommen, TreeMap ist nicht gut für Sie (und vorausgesetzt, Sie können keine Generika verwenden):
quelle
Mit
TreeMap
können Sie die Karte sortieren.quelle
Verwenden Sie eine TreeMap !
quelle
Wenn Sie bereits eine Karte haben und diese nach Schlüsseln sortieren möchten, verwenden Sie einfach:
Ein vollständiges Arbeitsbeispiel:
quelle
Verwenden Sie einfach TreeMap
Beachten Sie, dass die TreeMap nach der natürlichen Reihenfolge ihrer 'Schlüssel' sortiert ist.
quelle
Sofern Sie nicht verwenden können
TreeMap
, können wir in Java 8 die toMap () -Methode verwenden,Collectors
die folgende Parameter verwendet:Java 8 Beispiel
Wir können das Beispiel ändern, um einen benutzerdefinierten Komparator zu verwenden und nach Schlüsseln zu sortieren:
quelle
Verwenden von Java 8:
quelle
Dieser Code kann eine Schlüsselwertzuordnung in beiden Reihenfolgen sortieren, dh aufsteigend und absteigend.
Als Beispiel:
quelle
In Java 8
Um einen
Map<K, V>
nach Schlüssel zu sortieren , geben Sie die Schlüssel in einenList<K>
:So sortieren Sie einen
Map<K, V>
nach Schlüssel: Fügen Sie Einträge in einList<Map.Entry<K, V>>
:Last but not least: Um Zeichenfolgen länderspezifisch zu sortieren, verwenden Sie eine Collator- Klasse (Komparatorklasse):
quelle
quelle
In Java 8 können Sie auch .stream (). Sorted () verwenden:
quelle
Wir können den Schlüssel auch mithilfe der Arrays.sort-Methode sortieren.
quelle
Nur für den Fall, dass Sie keine verwenden möchten
TreeMap
Auch im Fall wollten Sie Ihre Karte auf der Grundlage der sortieren
values
gerade ÄnderungMap.Entry::getKey
zuMap.Entry::getValue
quelle