web-dev-qa-db-fra.com

Java: Comparable vs Comparator

Doublons possibles:
différence entre compare () et compareTo ()
Java: quelle est la différence entre l'implémentation de Comparable et de Comparator?

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

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

Merci

Mise à jour - BON LIEN AVEC EXEMPLE !!

http://www.digizol.com/2008/07/Java-sorting-comparator-vs-comparable.html

138
daydreamer

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 (bien que non requise) de s'aligner sur les autres méthodes de cet objet. Par exemple, un 0 doit toujours être renvoyé 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 s'aligner sur l'ordre naturel.

Par exemple, les chaînes sont généralement comparées par ordre alphabétique. Ainsi, la "a".compareTo("b") utiliserait des comparaisons alphabétiques. Si vous souhaitez comparer des 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 fins de moyens similaires. En général, implémentez comparable pour l'ordre naturel (la définition de l'ordre naturel est évidemment sujette à interprétation) et écrivez un comparateur pour d'autres besoins de tri ou de comparaison.

186
Andy

Comparator vous permet 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 le contrôle d'une classe (ou si vous voulez fournir plusieurs façons de comparer des objets sur lesquels vous avez le contrôle), utilisez Comparator.

Sinon, vous pouvez utiliser Comparable.

128
Justin Niessner