Quand une classe doit-elle être Comparable et/ou Comparatrice? [fermé]
j'ai vu des classes qui appliquent à la fois Comparable et comparateur . Qu'est-ce que cela signifie? Pourquoi j'en utiliserais un plutôt que l'autre?
11 réponses
le texte ci-dessous provient de comparateur vs Comparable
Comparables
un objet comparable est capable de se comparer à un autre objet. La classe elle-même doit implémenter l'interface java.lang.Comparable
pour pouvoir comparer ses instances.
comparateur
un objet de comparaison est capable de comparer deux objets différents. La classe ne compare pas ses instances, mais quelques autres instances de classe. Cette classe de comparateur doit implémenter l'interface java.util.Comparator
.
implémenter Comparable
signifie "je peux me comparer à un autre objet."C'est typiquement utile quand il y a une seule comparaison par défaut naturel.
implémenter Comparator
signifie " je peux comparer deux autres objets."C'est typiquement utile quand il y a plusieurs façons de comparer deux instances d'un type - par exemple, vous pouvez comparer les gens par l'âge, le nom, etc.
Comparable permet à une classe d'implémenter sa propre comparaison:
- c'est dans la même classe (c'est souvent un avantage)
- il ne peut être seule la mise en œuvre (donc vous ne pouvez pas l'utiliser si vous le souhaitez deux cas différents)
par comparaison, le comparateur est une comparaison externe:
- c'est habituellement dans une instance unique (soit dans la même classe, soit à un autre endroit)
- vous nom de chaque mise en œuvre avec la façon dont vous voulez trier les choses
- vous pouvez fournir des comparateurs pour les classes que vous ne contrôlez pas
- l'implémentation est utilisable même si le premier objet est nul 151980920"
dans les deux implémentations, vous pouvez encore choisissez ce que vous voulez être comparé . Avec les médicaments génériques, vous pouvez le déclarer, et vérifié à la compilation. Cela améliore la sécurité, mais il est également difficile de déterminer la valeur appropriée.
comme ligne directrice, 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... Mais pas une définition très précise ! :- (
-
Comparable<Object>
vous permet de vous l'utilisez dans tous les codes lors de la compilation (ce qui est bon si nécessaire, ou mauvais si non et vous perdez l'erreur de compilation) ; votre implémentation doit gérer les objets, et lancer au besoin, mais d'une manière robuste. -
Comparable<Itself>
est très strict au contraire.
drôle, lorsque vous sous-classe elle-même à la sous-classe, la sous-classe doit également être Comparable et robuste à ce sujet (ou il briserait le principe de Liskov, et vous donner l'exécution erreur.)
de java.lang.Comparable
-
À mettre en œuvre
Comparable
de l'interface, la classe doit implémenter une méthode uniquecompareTo()
int a.compareTo(b)
-
vous devez modifier la classe dont vous voulez trier l'instance. Ainsi, une seule séquence de tri peut être créée par classe.
Java.util.Comparateur
-
pour mettre en œuvre L'interface de comparateur, class doit mettre en œuvre une seule méthode
"compare()
int compare (a,b)
- vous construisez une classe séparée de la classe dont vous voulez trier l'instance. Pour que la séquence de tri multiple puisse être créée par classe.
Comparable
est pour 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 un usage spécifique.
Comparable
est généralement préférée. Mais parfois une classe implémente déjà Comparable
, mais vous voulez trier sur une propriété différente. Alors vous êtes forcé d'utiliser un Comparator
.
certaines classes prévoient en fait Comparators
pour les cas courants; par exemple, String
les s sont par défaut sensibles à la casse lorsqu'ils sont triés, mais il y a aussi un Comparator
statique appelé CASE_INSENSITIVE_ORDER
.
voici quelques différences entre le comparateur et comparables que j'ai trouvé sur le web:
-
si vous voyez alors la différence logique entre ces deux est comparateur en Java comparer deux objets qui lui sont fournis, tandis que L'interface Comparable compare "cette" référence avec l'objet spécifié.
-
Comparable en Java est utilisé pour mettre en œuvre l'ordre naturel de l'objet. En Java API String, Date et wrapper les classes implémentent une interface Comparable.
-
si une classe implémente une interface Comparable en Java, alors la collecte de cet objet soit List, soit Array peut être triée automatiquement en utilisant Collections.sort() ou d'un Tableau.la méthode et l'objet sort() seront triés en fonction de l'ordre naturel défini par la méthode CompareTo.
-
les objets qui mettent en œuvre Comparable en Java peuvent être utilisés comme des clés dans une carte triée ou éléments dans un ensemble trié par exemple TreeSet, sans spécifier de comparateur.
site: comment utiliser Comparator et Comparable en Java? Avec l'exemple
lire la suite: comment utiliser Comparator et Comparable en Java? Avec l'exemple
Comparable
est pour les objets avec un ordre naturel. L'objet lui-même sait qu'elle est condamnée.
Comparator
est pour les objets sans une commande naturelle ou quand vous souhaitez utiliser une commande Différente.
différence entre les interfaces de comparaison et les interfaces comparables
Comparable
est utilisé pour se comparer à un autre objet.
Comparator
est utilisé pour comparer deux types de données sont des objets.
si vous voyez alors la différence logique entre ces deux est Comparator
en Java comparer deux objets fournis à lui, tandis que Comparable
interface compare" cette " référence avec l'objet spécifié.
Comparable
en Java est utilisé pour mettre en œuvre l'ordre naturel de l'objet. Dans Java API String, les classes Date et wrapper implémentent l'interface Comparable
.
si une classe quelconque implémenter Comparable
interface en Java alors la collecte de cet objet List
ou Array
peut être trié automatiquement en utilisant 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 aucun Comparator
.
Mon annotation lib pour la mise en œuvre Comparable et Comparateur:
public class Person implements Comparable<Person> {
private String firstName;
private String lastName;
private int age;
private char gentle;
@Override
@CompaProperties({ @CompaProperty(property = "lastName"),
@CompaProperty(property = "age", order = Order.DSC) })
public int compareTo(Person person) {
return Compamatic.doComparasion(this, person);
}
}
cliquez sur le lien pour voir d'autres exemples. compamatic