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 Mapimplé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 TreeMapet TreeSetavez 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 TreeMapou TreeSetqu'il aura des caractéristiques de performances différentes de HashMapou 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 TreeMaptemps 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.