Apparemment, ce n'est pas documenté ou je l'ai manqué.
Ici est le lien vers la documentation et ci-dessous le texte sous forme d'image:
[~ # ~] modifier [~ # ~] (17/5): Je pense que trop de gens ont confondu cette question pour être une question de comparaison. Ce n'est pas. Le comparateur compare entre 2 éléments. Selon cette comparaison, la liste a été triée. Comment? Croissant ou décroissant?
Je vais affiner/simplifier la question encore plus: si le comparateur décide que l'élément A est plus petit que l'élément B. Dans la liste triée , l'élément A être situé à un indice inférieur à l'élément B?
L'ordre de tri est toujours croissant , où le comparateur définit quels éléments sont plus grands que les autres.
À partir de la documentation de Collections.sort (Liste <T> liste, Comparateur <? Super T> c) :
Trie la liste spécifiée selon l'ordre induit par le comparateur spécifié.
Dans la documentation de Comparator.compare (T, T) :
Compare ses deux arguments en faveur de l'ordre. Renvoie un entier négatif, zéro ou un entier positif car le premier argument est inférieur, égal ou supérieur au second.
C'est vous (ou plutôt votre comparateur) qui décide.
compare(T o1, T o2)
de votre Comparator
renvoie un négatif lorsque o1
est inférieur à o2
, vous obtenez un ordre croissant ( démo sur ideone ).compare(T o1, T o2)
de votre Comparator
renvoie un négatif lorsque o1
est supérieur à o2
, vous obtenez un ordre décroissant ( démo sur ideone ).Une autre façon de dire la même chose serait que sort
suppose que le comparateur ordonne que les deux éléments qui y sont passés passent de plus petit (o1
) à plus grand (o2
), et produisent un ordre croissant trier conformément à cette commande.
La documentation de la méthode Comparator.compareTo(o1, o2)
indique
Compare ses deux arguments en faveur de l'ordre. Renvoie un entier négatif, zéro ou un entier positif car le premier argument est inférieur, égal ou supérieur au second.
Donc, si vous voulez trier par ordre naturel, petit à grand, vous devez écrire l'implémentation telle que définie dans la documentation
public int compareTo(Integer o1, Integer o2) {
int v1 = (o1);
int v2 = (o2);
if(v1 == v2) {
return 0;
}
if(v1 < v2) {
return -1; //return negative integer if first argument is less than second
}
return 1;
}
Si vous voulez que le tri soit dans l'ordre inverse, c'est petit à grand
public int compareTo(Integer o1, Integer o2) {
int v1 = (o1);
int v2 = (o2);
if(v1 == v2) {
return 0;
}
if(v1 < v2) {
return 1; //do the other way
}
return -1;
}
Selon la documentation https://docs.Oracle.com/javase/7/docs/api/Java/util/Collections.html#sort (Java.util.List,% 20Java.util.Comparator =, l'implémentation de tri pour Collections.sort (liste, comparateur) est mergeSort.
Étant donné que le résultat produit par mergeSort est croissant ( https://en.wikipedia.org/wiki/Merge_sort ), l'ordre de tri de Collections.sort (liste, comparateur) est croissant.
C'est-à-dire que si le comparateur décide que l'élément A est plus petit que l'élément B. Dans la liste triée, l'élément A sera situé à un indice plus petit que l'élément B.