Qu'est-ce qui détermine l'ordre croissant ou décroissant dans Comparator / Comparable collection class?
Je comprends, nous pouvons trier ou de l'ordre des objets, stockée dans la Collection que par notre exigence(s).
Alors que je reçois une compréhension profonde, je ne suis pas convaincu par le fait que l'ordre croissant et l'ordre décroissant de l'arrangement est réalisé par (a - b) ->ascendant ou (b - a) -> en descendant, où "a" et "b" sont des membres de la classe, nous avons choisi de comparer.
Exemple:
public int compareTo(Student s) {
return this.grade - s.grade; //ascending order
//return s.grade - this.grade; //descending order
}
Ce qui est la logique derrière la commande objet éléments? comment "(ce.grade - s.grade)" si positif 1 se déplace ".grade" à l'avant et met.grade" suivant dans l'ordre, pourquoi pas l'inverse? Qui valide le comparer le résultat (+1, -1, 0) et les met dans l'ordre croissant ou décroissant, respectivement, est-il une documentation qui décrit le fonctionnement interne de cette partie?
public class Student implements Comparable <Student>{
String name;
int grade;
public Student(String name, int grade) {
this.name = name;
this.grade = grade;
}
public int compareTo(Student s) {
return this.grade - s.grade; //ascending order
//return s.grade - this.grade; //descending order
}
public String toString() {
return this.name + ", " + this.grade;
}
}
Merci de partager, merci beaucoup!
Edit:
- Je obtenir la Java docs, ma question est: est-ce
sort these grades (13, 2)
Case ascending -> return this.grade - s.grade;
picture in my mind:
compare (13, 2) , (13 - 2) > 0 so move 2 to front.
result -> 2, 13
------
Case descending -> return s.grade - this.grade;
picture in my mind:
compare (2, 13) , (2 - 13) < 0 so move 13 to front.
result -> 13, 2
"Comment est-ce possible?" a ma question d'origine. J'ai lu les docs, ne pouvait toujours pas comprendre.
source d'informationauteur David Prun
Vous devez vous connecter pour publier un commentaire.
En utilisant les nombres négatifs à dire "c'est moins que", positif numéros de dire "c'est plus que cela" et de 0 à dire "ces 2 choses sont à égalité," a été dans de nombreux langages informatiques pour les+ de 30 ans.
Il y a plusieurs classes internes qui utilisent la valeur de retour pour réorganiser les éléments dans des tableaux ou des collections, y compris
Collections.sort()
Arrays.sort()
TreeSet
MODIFIER
Pour répondre à COMMENT cela fonctionne, vous aurez à regarder le code source pour chacune des classes, j'ai énumérés ci-dessus. Certains d'entre eux sont assez compliqué à essayer de faire le tri aussi efficace que possible. Mais en général, tout se résume à un code comme ceci:
@DavidPrun Bonne question. J'ai essayé d'expliquer cela par un exemple.
(x,y) -> (2, 5)
Ordre croissant (x.compareTo(y)):
si x.compareTo(y) == 1, alors x > y , car y est plus petit que x, vous devez la déplacer y en face de x.
2.compareTo(5) == -1 , alors ne bougez pas 5, en face de 2.
Ordre décroissant (y).compareTo(x)):
si y'.compareTo(x) == 1, alors y > x , puisque y est plus grand que x, vous devez la déplacer y en face de x.
5.compareTo(2) == 1 , déplacer 5, en face de 2.
Fondamentalement, nous sommes toujours y déplacer en face de x, si le résultat de la méthode compareTo est 1.
Les Collections.sort() les méthodes n' .
maintenant idk quoi exactement l'algorithme de tri() en java est , je crois, sa modifiés double fusionné trier ... mais quelque part dans le code compareTo(Comparable c) est appelé à déterminer ce qu'est supérieure/inférieure , ill essayer de l'expliquer dans un simplier l'algorithme :
permet de dire que j'ai du Cercle , généralement u de comparer les cercles par leur diamètre de ...
maintenant permet de faire un tableau de cercles :
maintenant, supposons c'est l'algorithme de tri défini dans la Collection.sort() :
maintenant, je ne suis pas sûr que j'ai écrit l'algorithme de tri écrire (asceding/descente), je l'ai fait vite , mais je suppose que le point est clair comme de comment trier() est de décider ce qui va où ... vous pouvez demander dans les commentaires pour plus de explanaition