Comparable et comparateur en Java - Différence entre eux

Différence clé entre comparable et comparateur en Java

  • Comparable en Java est un objet permettant de se comparer à un autre objet, tandis que Comparator est un objet permettant de comparer différents objets de différentes classes.
  • Comparable fournit la méthode compareTo() pour trier les éléments en Java, tandis que Comparator fournit la méthode compare() pour trier les éléments en Java.
  • Une interface comparable est présente dans le package java.lang, tandis que l'interface Comparator est présente dans le package java.util.
  • Comparable fournit une seule séquence de tri, tandis que Comparator fournit plusieurs séquences de tri.
  • Comparable affecte la classe d'origine, alors que comparateur n'affecte pas la classe d'origine.
Différence entre comparable et comparateur en Java
Différence entre comparateur et comparable en Java

Qu’est-ce qui est comparable en Java ?

Comparable en Java, c'est un objet pour se comparer à un autre objet. Cela aide à trier la liste des objets personnalisés. L'interface java.lang.Comparable doit être implémentée par une classe afin de comparer ses instances. Le tableau d'objets implémentant une interface comparable est trié automatiquement par les méthodes Arrays.sort et Collections.sort.

Qu’est-ce que le comparateur en Java ?

Comparateur en Java est un objet permettant de comparer différents objets de différentes classes. L'interface de comparaison en Java est également utilisée pour organiser les objets des classes définies par l'utilisateur. Il comprend deux méthodes d'interface de comparaison importantes appelées comparer (Objet obj1, Objet obj2) et égales (Élément Objet).

Différences entre comparable et comparateur en Java

Voici la principale différence entre Java Comparable et Comparator :

Comparable Comparateur
Comparable fournit la méthode compareTo() pour trier les éléments en Java. Comparator fournit la méthode compare() pour trier les éléments en Java.
Une interface comparable est présente dans le package java.lang. L'interface du comparateur est présente dans le package java.util.
La logique de tri doit être dans la même classe dont vous allez trier l'objet. La logique de tri doit être dans une classe distincte pour écrire différents tris basés sur différents attributs des objets.
La classe dont vous souhaitez trier les objets doit implémenter une interface comparable. La classe dont vous souhaitez trier les objets n’a pas besoin d’implémenter une interface de comparaison.
Il fournit des séquences de tri uniques. Il fournit plusieurs séquences de tri.
Cette méthode peut trier les données selon l'ordre de tri naturel. Cette méthode trie les données selon l'ordre de tri personnalisé.
Cela affecte la classe d'origine. c'est-à-dire que la classe réelle est modifiée. Cela n'affecte pas la classe d'origine, c'est-à-dire que la classe réelle n'est pas modifiée.
Implémenté fréquemment dans l'API par : Calendrier, classes Wrapper, Date et
Chaîne.
Il est implémenté pour trier les instances de classes tierces.
Toutes les classes wrapper et la classe String implémentent une interface comparable. Les seules classes implémentées de Comparator sont Collator et RuleBasedColator.

Méthode utilisée dans Comparable

Le following est une méthode importante utilisée dans l'interface Comparable :

Comparer aux():

Méthode CompareTo() est utilisé pour effectuer un tri naturel sur une chaîne. La signification du tri naturel est l'ordre de tri qui s'applique à l'objet, par exemple l'ordre numérique pour trier les entiers, l'ordre alphabétique pour les chaînes, etc.

La syntaxe de la méthode CompareTo() est la suivante :

int compareTo(T obj)

Dans la syntaxe ci-dessus, T signifie le type d'objets que vous allez comparer.

Compatibilité de la méthode CompareTo()ares l'objet avec T obj.

Sortie :

  • Il renvoie 0 si les valeurs sont égales.
  • Dans le cas où l'objet a une valeur inférieure, cette méthode renvoie une valeur négative.
  • Si l'objet a une valeur plus élevée, il renvoie une valeur positive.

Exemple de méthode CompareTo() :

Le following Un exemple comparable de programme Java montre la comparaison de deux caractères, « a » et « b ». Le caractère « a » précède le « b » par ordre alphabétique.

Par conséquent, la sortie est -1. Le caractère « b » vient après « a » par ordre alphabétique. La sortie est donc 1. Les caractères « a » et « b » sont tous deux équivalents. La sortie est donc 0.

public class Sample_String {
    public static void main(String[] args) {
        String str_Sample = "a";
        System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b"));
        str_Sample = "b";
        System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a"));
        str_Sample = "b";
        System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b"));
    }
}

Sortie

Compare To 'a' b is : -1
Compare To 'b' a is : 1
Compare To 'b' b is : 0

Méthode utilisée dans le comparateur

Following sont les méthodes importantes utilisées dans l'interface du comparateur :

Comparer():

Compare() vous permet de commander des objets. Pour ce faire, vous devez créer une classe qui implémente l’interface du comparateur. Après cela, vous devez remplacer sa méthode de comparaison.

La syntaxe de la méthode compare() est la suivante :

compare(Object obj1, Object obj2)

Dans la syntaxe ci-dessus, obj1 et obj2 sont deux objets que vous devez comparer à l'aide de la méthode compare().

Sortie :

  • Il renvoie un entier négatif si le premier argument est inférieur au second.
  • Renvoie zéro si le premier argument et le deuxième argument sont égaux.
  • Cette méthode peut renvoyer un entier positif, dans le cas où le premier argument est supérieur au second.

Vous devez vous assurer que la relation est transitive. Par exemple, ((compare(a, b)>0) && (compare(b, c)>0)) qui implique compare(a, c)>0.

Exemple de méthode de comparaison :

Dans le programme ci-dessous de l'exemple de comparaison Java, il y a 6 les variables. "x", "y", "p", "q", "r" et "s". La sortie est -1 car la valeur de « x », 20 est inférieure à la valeur de « y », 30. La sortie est 0 car la valeur de « p », 40 est égale à la valeur de « q », 40. .

import java.lang.Integer; 
public class example { 
    public static void main(String args[]) 
    { 
        int x = 20; 
        int y = 30; 
        // as 10 less than 20, 
        // Output will be a value less than zero 
        System.out.println(Integer.compare(x, y)); 
        int p = 40; 
        int q = 40; 
        // as 30 equals 30, 
        // Output will be zero 
        System.out.println(Integer.compare(p, q)); 
        int r = 20; 
        int s = 7; 
        // as 15 is greater than 8, 
        // Output will be a value greater than zero 
        System.out.println(Integer.compare(r, s)); 
    } 
}

Sortie :

-1
0
1

Équivaut à():

Equals() vérifie si l'objet numérique est égal à l'objet passé en argument ou non.

La syntaxe de la méthode equals() est la suivante :

public booléen égal (Objet o)

Cette méthode prend deux paramètres 1) n'importe quel objet 2) valeur de retour. Il renvoie vrai si l'argument passé n'est pas nul et s'il s'agit d'un objet du type similaire ayant la même valeur numérique.

Exemple de méthode égale :

Dans l'exemple ci-dessous, nous comparons les quatre variables entre elles. Trois variables sont de type entier et une de type court. Le premier résultat est faux car la valeur de p, qui est 5, n’est pas égale à la valeur de q, qui est 20.

Le deuxième résultat est vrai car la valeur des variables p et r est la même, soit 5. Enfin, le résultat est faux, car les variables p et s ont des valeurs assignées différentes.

public class Test { 
   public static void main(String args[]) {
      Integer p = 5;
      Integer q = 20;
      Integer r =5;
      Short s = 5;
      System.out.println(p.equals(q));  
      System.out.println(p.equals(r)); 
      System.out.println(p.equals(s));
   }
}

Sortie

false
true
false

Meilleures pratiques lors de l'utilisation de Comparator et Comparable en Java

  • Utilisez une interface comparable lorsque la comparaison est standard pour la classe spécifique.
  • Vous pouvez utiliser des lambdas avec un comparateur.
  • De nombreuses classes de base disponibles dans implémentent une interface comparable.
  • Il est possible d'utiliser TreeSet et TreeMap ou en triant Set ou Map.
  • La méthode compareTo() fonctionne aussi bien avec un comparateur qu'avec des comparables.
  • Utilisez l'interface du comparateur uniquement lorsque vous < avez besoin de plus de flexibilité.
  • La méthode compareTo() renverra un entier positif si le premier objet est supérieur à l'autre, négatif s'il est inférieur et zéro si les deux sont identiques.