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.
En supposant que TreeMap n'est pas bon pour vous (et en supposant que vous ne pouvez pas utiliser de génériques):
la source
À l'aide de,
TreeMap
vous pouvez trier la carte.la source
Utilisez un TreeMap !
la source
Si vous avez déjà une carte et souhaitez la trier sur des clés, utilisez simplement:
Un exemple de travail complet:
la source
Utilisez simplement TreeMap
Sachez que le TreeMap est trié selon l'ordre naturel de ses «clés»
la source
Si vous ne pouvez pas utiliser
TreeMap
, en Java 8, nous pouvons utiliser la méthode toMap ()Collectors
qui prend les paramètres suivants:Exemple Java 8
Nous pouvons modifier l'exemple pour utiliser un comparateur personnalisé et trier en fonction des clés comme:
la source
Utilisation de Java 8:
la source
Ce code peut trier une carte de valeurs-clés dans les deux ordres, c'est-à-dire croissant et décroissant.
Par exemple:
la source
Dans Java 8
Pour trier un
Map<K, V>
par clé, en mettant les clés dans unList<K>
:Pour trier une
Map<K, V>
clé par, en mettant les entrées dans unList<Map.Entry<K, V>>
:Dernier point mais non le moindre: pour trier les chaînes de manière sensible aux paramètres régionaux - utilisez une classe Collator (comparateur):
la source
la source
Dans Java 8, vous pouvez également utiliser .stream (). Sorted ():
la source
Nous pouvons également trier la clé en utilisant la méthode Arrays.sort.
la source
Juste au cas où vous ne voudriez pas utiliser un
TreeMap
, Vous vouliez en cas également pour trier votre carte sur la base de
values
tout changementMap.Entry::getKey
deMap.Entry::getValue
la source