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 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
Mรฉthode 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.
  • Le 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รฉ.
  • Le 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.

Rรฉsumez cet article avec :