Réponse courte
Utilisez un TreeMap
. C'est précisément à cela qu'il sert.
Si cette carte vous est transmise et que vous ne pouvez pas en déterminer le type, vous pouvez procéder comme suit :
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
Cela va itérer à travers la carte dans l'ordre naturel des clés.
Réponse plus longue
Techniquement, vous pouvez utiliser tout ce qui implémente SortedMap
mais, sauf dans de rares cas, cela revient à TreeMap
tout comme l'utilisation d'un Map
La mise en œuvre se résume généralement à HashMap
.
Pour les cas où vos clés sont un type complexe qui n'implémente pas Comparable ou si vous ne voulez pas utiliser l'ordre naturel alors TreeMap
y TreeSet
ont des constructeurs supplémentaires qui vous permettent de passer dans une 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());
N'oubliez pas que lorsque vous utilisez un TreeMap
o TreeSet
qu'il aura des caractéristiques de performance différentes de celles HashMap
o HashSet
. En gros, les opérations qui trouvent ou insèrent un élément iront de O(1) a O(Log(N)) .
Dans un HashMap
le passage de 1 000 à 10 000 éléments n'a pas vraiment d'incidence sur le temps nécessaire à la recherche d'un élément. TreeMap
le temps de recherche sera environ 3 fois plus lent (en supposant que Log 2 ). Passer de 1000 à 100 000 sera environ 6 fois plus lent pour chaque recherche d'élément.