Réponse courte
Utilisez a TreeMap
. C'est précisément à cela qu'il sert.
Si cette carte vous est transmise et que vous ne pouvez pas déterminer le type, vous pouvez effectuer les opérations suivantes:
SortedSet<String> keys = new TreeSet<>(map.keySet());
for (String key : keys) {
String value = map.get(key);
// do something
}
Cela parcourra la carte dans l'ordre naturel des touches.
Réponse plus longue
Techniquement, vous pouvez utiliser tout ce qui implémente SortedMap
, mais à l'exception de rares cas, cela équivaut à TreeMap
, tout comme l'utilisation d'une Map
implémentation équivaut généralement à HashMap
.
Pour les cas où vos clés sont d'un type complexe qui n'implémente pas Comparable ou si vous ne voulez pas utiliser l'ordre naturel alors TreeMap
et TreeSet
avez des constructeurs supplémentaires qui vous permettent de passer un 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());
Rappelez-vous lorsque vous utilisez un TreeMap
ou TreeSet
qu'il aura des caractéristiques de performances différentes de HashMap
ou HashSet
. En gros, les opérations qui trouvent ou insèrent un élément passeront de O (1) à O (Log (N)) .
Dans un HashMap
, passer de 1000 éléments à 10 000 n'affecte pas vraiment votre temps de recherche d'un élément, mais pour un TreeMap
temps de recherche sera environ 3 fois plus lent (en supposant Log 2 ). Passer de 1000 à 100 000 sera environ 6 fois plus lent pour chaque recherche d'élément.