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 Comparablede 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