J'ai vu des classes qui implémentent à la fois Comparable et Comparator . Qu'est-ce que ça veut dire? Pourquoi utiliserais-je l'un plutôt que l'autre?
java
comparator
comparable
Nick Heiner
la source
la source
Réponses:
Le texte ci-dessous provient de Comparator vs Comparable
Comparable
Un objet comparable est capable de se comparer à un autre objet. La classe elle-même doit implémenter l'
java.lang.Comparable
interface afin de pouvoir comparer ses instances.Comparateur
Un objet comparateur est capable de comparer deux objets différents. La classe ne compare pas ses instances, mais certaines autres instances de la classe. Cette classe de comparateur doit implémenter l'
java.util.Comparator
interface.la source
Implémentation
Comparable
signifie « Je peux me comparer à un autre objet » . Ceci est généralement utile lorsqu'il existe une seule comparaison naturelle par défaut.Implémenter
Comparator
signifie " Je peux comparer deux autres objets. " Ceci est généralement utile lorsqu'il existe plusieurs façons de comparer deux instances d'un type - par exemple, vous pouvez comparer des personnes par âge, nom, etc.la source
Person
outilComparable
, car vous ne pouvez pas changer la façon dont deux personnes sont comparées.Person
. 2) Le comparateur, par exemplePersonAgeComparator
qui est capable de comparer deux entités différentes et de décider laquelle doit venir en premier dans cet ordre de tri particulier. 3) Le code de tri, qui prend une collection d'entités et un comparateur, et trie cette collection à l'aide du comparateur pour déterminer l'ordre.Comparable permet à une classe d'implémenter sa propre comparaison:
Par comparaison, Comparator est une comparaison externe:
Dans les deux implémentations, vous pouvez toujours choisir ce que vous voulez comparer . Avec les génériques, vous pouvez le déclarer et le faire vérifier au moment de la compilation. Cela améliore la sécurité, mais il est également difficile de déterminer la valeur appropriée.
À titre indicatif, j'utilise généralement la classe ou l'interface la plus générale à laquelle cet objet pourrait être comparé, dans tous les cas d'utilisation que j'envisage ... Une définition pas très précise cependant! :-(
Comparable<Object>
vous permet de l'utiliser dans tous les codes au moment de la compilation (ce qui est bon si nécessaire, ou mauvais sinon et vous perdez l'erreur de compilation); votre implémentation doit faire face aux objets et effectuer un cast selon les besoins, mais de manière robuste.Comparable<Itself>
est très strict au contraire.la source
java.lang.Comparable
Pour implémenter l'
Comparable
interface, la classe doit implémenter une seule méthodecompareTo()
int a.compareTo(b)
Vous devez modifier la classe dont vous souhaitez trier l'instance. Ainsi, une seule séquence de tri peut être créée par classe.
java.util.Comparator
Pour implémenter l'interface Comparator, la classe doit implémenter une seule méthode
compare()
int compare (a,b)
la source
Comparable
sert à fournir un ordre par défaut sur les objets de données, par exemple si les objets de données ont un ordre naturel.A
Comparator
représente la commande elle-même pour une utilisation spécifique.la source
Comparable
est généralement préféré. Mais parfois, une classe implémente déjàComparable
, mais vous voulez trier sur une propriété différente. Ensuite, vous êtes obligé d'utiliser unComparator
.Certaines classes prévoient en fait
Comparators
des cas courants; par exemple, lesString
s sont par défaut sensibles à la casse lorsqu'ils sont triés, mais il y a aussi un statiqueComparator
appeléCASE_INSENSITIVE_ORDER
.la source
voici quelques différences entre Comparator et Comparable que j'ai trouvées sur le Web:
Si vous voyez alors la différence logique entre ces deux est Comparator en Java, comparez deux objets qui lui sont fournis, tandis que l'interface Comparable compare "cette" référence à l'objet spécifié.
Comparable en Java est utilisé pour implémenter l'ordre naturel des objets. Dans les classes API Java String, Date et wrapper implémentent l'interface Comparable.
Si une classe implémente une interface Comparable en Java, la collection de cet objet List ou Array peut être triée automatiquement à l'aide de la méthode Collections.sort () ou Array.sort () et l'objet sera trié en fonction de l'ordre naturel défini par la méthode CompareTo.
Les objets qui implémentent Comparable en Java peuvent être utilisés comme clés dans une carte triée ou des éléments dans un ensemble trié, par exemple TreeSet, sans spécifier de comparateur.
site: Comment utiliser Comparator et Comparable en Java? Avec exemple
Lire la suite: Comment utiliser Comparator et Comparable en Java? Avec exemple
la source
Comparable
est pour les objets avec un ordre naturel. L'objet lui-même sait comment il doit être ordonné.Comparator
est destiné aux objets sans ordre naturel ou lorsque vous souhaitez utiliser un ordre différent.la source
Différence entre les interfaces de comparaison et de comparaison
Comparable
est utilisé pour se comparer en utilisant avec un autre objet.Comparator
est utilisé pour comparer deux types de données sont des objets.la source
Si vous voyez alors la différence logique entre ces deux est
Comparator
en Java, comparez deux objets qui lui sont fournis, tandis que l'Comparable
interface compare "cette" référence à l'objet spécifié.Comparable
en Java est utilisé pour implémenter l'ordre naturel des objets. Dans les classes API Java String, Date et wrapper implémententComparable
interface.Si une classe implémente une
Comparable
interface en Java, alors la collection de cet objetList
ouArray
peut être triée automatiquement à l'aide de la méthodeCollections.sort()
ouArray.sort()
et l'objet sera trié en fonction de son ordre naturel défini parcompareTo
méthode.Les objets qui implémentent
Comparable
en Java peuvent être utilisés comme clés dans une carte triée ou des éléments dans un ensemble trié par exempleTreeSet
, sans en spécifier aucunComparator
.la source
Ma bibliothèque d'annotations pour l'implémentation de Comparable et Comparator:
Cliquez sur le lien pour voir plus d'exemples. compamatique
la source