Quelle est la différence entre la méthode Java compare()
y compareTo()
méthodes ? Ces méthodes donnent-elles la même réponse ?
Réponses
Trop de publicités?Comparable contient une méthode appelée compareTo(obj)
qui ne prend qu'un seul argument et qui se compare à une autre instance ou à des objets de la même classe.
Comparateur contient une méthode appelée compare(obj1,obj2)
qui prend deux arguments et compare la valeur de deux objets de la même classe ou de classes différentes.
La relation entre l'objet possédant cette méthode et ses collaborateurs est différente.
compareTo()
est une méthode de l'interface Comparable Il est donc utilisé pour comparer CETTE instance à une autre.
compare()
est une méthode de l'interface Comparateur Il est donc utilisé pour comparer deux instances différentes d'une autre classe entre elles.
Si vous voulez, mettre en œuvre Comparable
signifie que les instances de la classe peuvent être facilement comparées.
Mise en œuvre de Comparator
signifie que les instances sont adaptées pour comparer différents objets (d'autres classes).
compareTo(T object)
provient de l'interface java.lang.Comparable, implémentée pour comparer cet objet avec un autre afin de donner une valeur int négative pour que cet objet soit inférieur, 0 pour qu'il soit égal, ou une valeur positive pour qu'il soit supérieur à l'autre. Il s'agit de la méthode de comparaison la plus pratique, mais elle doit être implémentée dans chaque classe que vous souhaitez comparer.
compare(T obj1, T obj2)
provient de l'interface java.util.Comparator, implémentée dans une classe séparée qui compare les objets d'une autre classe pour donner une valeur int négative si le premier objet est inférieur, 0 si égal, ou une valeur positive si supérieur au second objet. Elle est nécessaire lorsque vous ne pouvez pas faire en sorte qu'une classe implémente compareTo() parce qu'elle n'est pas modifiable. Elle est également utilisée lorsque vous souhaitez comparer des objets de différentes manières, et non pas d'une seule (par exemple, par le nom ou l'âge).
La principale différence réside dans l'utilisation des interfaces :
Comparable (qui possède compareTo()) exige que les objets à comparer (afin d'utiliser un TreeMap, ou de trier une liste) implémentent cette interface. Mais que faire si la classe n'implémente pas Comparable et que vous ne pouvez pas la modifier parce qu'elle fait partie d'une bibliothèque tierce ? Vous devez alors implémenter un comparateur, ce qui est un peu moins pratique à utiliser.