Comparable vs Comparateur dans Java

Différence clé entre comparable et comparateur dans Java

  • Comparable dans Java est un objet pour se comparer à un autre objet, tandis que Comparator est un objet pour comparer différents objets de différentes classes.
  • Comparable fournit le compareTo() méthode pour trier les éléments dans Java, alors que Comparator fournit le compare() méthode pour trier les éléments dans Java.
  • Une interface comparable est présente dans java.lang package, alors que l’interface Comparator est présente dans java.util paquet.
  • 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 Comparator n'affecte pas la classe d'origine.

Différence entre comparable et comparateur
Différence entre comparable et comparateur

Ici, j'ai analysé la différence entre comparable et comparateur et j'évaluerai de manière exhaustive leurs avantages et leurs inconvénients.

Ce qui est comparable dans Java?

Comparable in Java est un objet qui se compare à un autre objet. Il permet de trier la liste des objets personnalisés. Java.lang.L'interface comparable doit être implémentée par une classe afin de comparer ses instances. Un tableau d'objets implémentant une interface comparable est automatiquement trié par Arrays.sort et le Collections.sort méthodes.

Méthode utilisée dans Comparable

Je voudrais souligner une méthode importante que j'utilise fréquemment dans l'interface Comparable :

Comparer aux():

La méthode CompareTo() est utilisée pour effectuer un tri naturel sur une chaîne. Le tri naturel désigne l'ordre de tri qui s'applique à l'objet, par exemple l'ordre numérique pour le tri des entiers, l'ordre alphabétique pour les chaînes, etc.

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

int compareTo(T obj)

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

CompareTo() la méthode compare l'objet avec T obj.

Sortie :

  • Il renvoie 0 si les valeurs sont égales.
  • Si 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.

Un exemple de comparable dans Java

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

La sortie est donc -1. Le caractère « b » vient après « a » par ordre alphabétique. Par conséquent, le résultat est 1. Les caractères « a » et « b » sont tous deux équivalents. Par conséquent, la sortie est 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

Qu'est-ce qu'un comparateur dans Java?

Un comparateur in Java est un objet permettant de comparer différents objets de différentes classes. L'interface du comparateur dans Java est également utilisé 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).

Méthode utilisée dans le comparateur

Dans ma pratique, je m'appuie fréquemment sur les méthodes critiques suivantes de l'interface de comparaison :

Comparer():

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

La syntaxe du compare() La méthode 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(). compare() méthode.

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.

Un exemple de comparable dans Java

Ci-dessous Java exemple de comparaison, il y en 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 ou non à l'objet qui est passé en argument.

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

public boolean equals(Object o)

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

Exemple de méthode égale :

Dans l'exemple ci-dessous, je comparerai les quatre variables entre elles. Trois variables sont de type entier et une est 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 attribué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

Différences entre comparable et comparateur dans Java

Je vois souvent une confusion entre Java Comparable et comparateur ; voici la principale différence :

Différence entre comparable et comparateur dans Java
Différence entre comparable et comparateur dans Java

Base de comparaison Comparable Comparateur
Method Offres comparables compareTo() méthode pour trier les éléments dans Java. Le comparateur fournit compare() méthode pour trier les éléments dans Java.
Forfait Une interface comparable est présente dans java.lang paquet. Une interface de comparaison est présente dans java.util paquet.
Logique du tri La logique de tri doit être dans la même classe que l'objet que vous allez trier. La logique du tri doit être dans des classes distinctes pour écrire différents tris basés sur différents attributs des objets.
Objet de classe La classe dont vous souhaitez trier les objets doit implémenter l'interface Comparable. Une classe dont vous souhaitez trier les objets n'a pas besoin d'implémenter une interface de comparaison.
Séquences de tri Il fournit des séquences de tri uniques. Il fournit plusieurs séquences de tri.
Ordre 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é.
Classe 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.
Utilisation Implémenté fréquemment dans l'API par Calendar, les classes Wrapper, Date et
Chaîne.
Il est implémenté pour trier les instances de classes tierces.
Mettre en œuvre le Toutes les classes wrapper et classes de chaînes implémentent des interfaces comparables. Les seules classes implémentées de Comparator sont Collator et RuleBasedColator.

Meilleures pratiques lors de l'utilisation de comparateurs et de comparables dans Java

  • Utilisez une interface comparable lorsque la comparaison est standard pour la classe spécifique.
  • Vous pouvez utiliser des lambdas avec un comparateur.
  • La plupart des classes de base disponibles implémentent une interface comparable.
  • Il est possible d'utiliser TreeSet et TreeMap lors du tri de Set ou Map.
  • Votre compareTo() La méthode fonctionne avec un comparateur ainsi qu'avec un comparable.
  • Utilisez l'interface du comparateur uniquement lorsque vous < avez besoin de plus de flexibilité.
  • Votre compareTo() La méthode 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.

Comment choisir entre un comparable et un comparateur

En conclusion, mon expérience pratique suggère que l'utilisation de Comparable et Comparator dans Java augmente considérablement le contrôle que nous avons sur le tri des données, améliorant à la fois les performances et les fonctionnalités.