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?

113
demandé sur yeaaaahhhh..hamf hamf 2009-09-17 21:09:38

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 .

205
répondu Dan 2014-09-12 05:12:27

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.

126
répondu Jon Skeet 2009-09-17 17:25:58

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.)

33
répondu KLE 2009-09-17 21:56:15

de java.lang.Comparable

  1. À mettre en œuvre Comparable de l'interface, la classe doit implémenter une méthode unique compareTo()

    int a.compareTo(b)

  2. 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

  1. pour mettre en œuvre L'interface de comparateur, class doit mettre en œuvre une seule méthode compare()

    "

    int compare (a,b)

  2. 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.
17
répondu codiacTushki 2018-05-07 07:06:32

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.

14
répondu starblue 2012-12-07 11:40:45

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 .

7
répondu Michael Myers 2009-09-17 17:15:09

voici quelques différences entre le comparateur et comparables que j'ai trouvé sur le web:

  1. 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é.

  2. 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.

  3. 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.

  4. 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

6
répondu javapassion 2012-11-27 06:31:12

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.

5
répondu Michael Lloyd Lee mlk 2012-11-27 06:31:24

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.

3
répondu SravaniChowdary.Gorijavolu 2016-10-21 01:34:05

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 .

2
répondu Srinivas 2012-10-28 21:58:38

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

0
répondu Jianmin Liu 2012-11-27 06:29:10