Java: Comparable vs Comparateur [dupliquer]


Cette question a déjà des réponses ici: Fermé il y a 10 ans.

Doublons Possibles:
différence entre compare () et compareTo()
Java: Quelle est la différence entre l'implémentation de Comparable et Comparateur?

Quelles sont les principales différences entre Comparable et Comparateur.

Et qui est préféré à l'autre dans quels scénarios?

Merci

Mise à jour-BON LIEN AVEC L'EXEMPLE!!

Http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html

Author: Community, 2010-11-05

2 answers

Lorsque votre classe implémente Comparable , la méthode compareTo de la classe définit l'ordre "naturel" de cet objet. Cette méthode est contractuellement obligée (mais pas exigée) d'être en ligne avec d'autres méthodes sur cet objet, comme un 0 doit toujours être retourné pour les objets lorsque les comparaisons .equals() renvoient true.

Un Comparateur est sa propre définition de la façon de comparer deux objets, et peut être utilisé pour comparer des objets d'une manière qui pourrait ne pas ordre naturel.

Par exemple, les chaînes sont généralement comparées par ordre alphabétique. Ainsi, le "a".compareTo("b") utiliserait des comparaisons alphabétiques. Si vous voulez comparer les chaînes sur la longueur, vous devez écrire un comparateur personnalisé.

En bref, il n'y a pas beaucoup de différence. Ils sont les deux extrémités de moyens similaires. En général, implémentez comparable pour l'ordre naturel, (la définition de l'ordre naturel est évidemment ouverte à l'interprétation), et écrivez un comparateur pour d'autres besoins de tri ou de comparaison.

 198
Author: Andy, 2016-02-09 15:27:06

Comparator fournit un moyen pour vous de fournir une logique de comparaison personnalisée pour les types sur lesquels vous n'avez aucun contrôle.

Comparable vous permet de spécifier comment les objets que vous implémentez sont comparés.

Évidemment, si vous n'avez pas de contrôle sur une classe (ou si vous souhaitez fournir plusieurs façons de comparer des objets sur lesquels vous avez le contrôle), utilisez Comparator.

Sinon, vous pouvez utiliser Comparable.

 137
Author: Justin Niessner, 2010-11-05 17:52:41