Kurze Antwort
Verwenden Sie eine TreeMap
. Das ist genau das, wofür es gedacht ist.
Wenn Ihnen diese Karte übergeben wird und Sie den Typ nicht bestimmen können, können Sie wie folgt vorgehen:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
Dadurch wird die Karte in der natürlichen Reihenfolge der Schlüssel durchlaufen.
Längere Antwort
Technisch gesehen können Sie alles verwenden, was die SortedMap
aber außer in seltenen Fällen läuft dies auf TreeMap
ebenso wie die Verwendung eines Map
Die Umsetzung beläuft sich in der Regel auf HashMap
.
Für Fälle, in denen Ihre Schlüssel ein komplexer Typ sind, der Comparable nicht implementiert, oder Sie nicht die natürliche Reihenfolge verwenden wollen, dann TreeMap
y TreeSet
haben zusätzliche Konstruktoren, mit denen Sie eine 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
o TreeSet
dass sie andere Leistungseigenschaften haben wird als HashMap
o HashSet
. Grob gesagt gehen Operationen, die ein Element suchen oder einfügen, von O(1) a O(Log(N)) .
In einem HashMap
Wenn Sie von 1000 auf 10.000 Elemente wechseln, hat das keinen Einfluss auf die Zeit, die Sie für die Suche nach einem Element benötigen, aber für ein TreeMap
wird die Suchzeit etwa 3 Mal langsamer (unter der Annahme, dass Log 2 ). Der Übergang von 1000 auf 100.000 wird bei jeder Suche nach einem Element etwa 6 Mal langsamer sein.