Comment fonctionne le TreeMap
? disons par exemple que vous avez la carte suivante:
TreeMap<String, Integer> treemap = new TreeMap<>();
treemap.put("lol", 1);
treemap.put("Marc", 2);
treemap.put("Jesper", 3);
Iterator ittwo = treemap.entrySet().iterator();
while (ittwo.hasNext()) {
Map.Entry pairs = (Map.Entry)ittwo.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
ittwo.remove();
}
La sortie de ceci est:
Jesper = 3
Marc = 2
lol = 1
Donc, si ce n'est pas par ordre alphabétique, qu'est-ce que c'est alors?
Il est non seulement alphabétique, mais il est également sensible à la casse supérieure/inférieure.
TreeMap<String, Integer> treemap = new TreeMap<String, Integer>();
treemap.put("Lol", 1);
treemap.put("Marc", 2);
treemap.put("Jesper", 3);
treemap.put("lol1", 1);
treemap.put("marc1", 2);
treemap.put("jesper1", 3);
Production:
Jesper = 3
Lol = 1
Marc = 2
jesper1 = 3
lol1 = 1
marc1 = 2
Donc, si vous n'en avez pas besoin, vous pouvez utiliser votre comparateur personnalisé et comparer la chaîne en minuscules:
TreeMap<String, Integer> treemap = new TreeMap<String, Integer>(new Comparator<String>() {
public int compare(String o1, String o2) {
return o1.toLowerCase().compareTo(o2.toLowerCase());
}
});
treemap.put("Lol", 1);
treemap.put("Marc", 2);
treemap.put("Jesper", 3);
treemap.put("lol1", 1);
treemap.put("marc1", 2);
treemap.put("jesper1", 3);
Production:
Jesper = 3
jesper1 = 3
Lol = 1
lol1 = 1
Marc = 2
marc1 = 2
Comme indiqué dans le JavaDoc un TreeMap
"... est trié selon l'ordre naturel de ses clés ... "(c'est moi qui souligne).
Ainsi, votre résultat est correct, étant donné que les minuscules l
sont après majuscule M
dans l'alphabet UTF.
Si vous souhaitez remplacer le comportement par défaut, vous pouvez fournir un Comparator
au constructeur TreeMap
.
Comme vous n'avez transmis aucun Comparator
via le constructeur, cela va donc construire un nouveau TreeMap
en utilisant l'ordre naturel de ses clés.
Dans Java l'ordre naturel signifie lexicographical
ordre.
vous obtenez en fait la sortie correcte.
J(uppercase J)>M(uppercase M)>l(lowercase l).
les lettres majuscules sont lexcographiquement plus grandes que les lettres minuscules