Comparabile vs Comparatore in Java

Differenza chiave tra comparabile e comparatore in Java

  • Paragonabile a Java è un oggetto per confrontare se stesso con un altro oggetto, mentre Comparator è un oggetto per confrontare diversi oggetti di classi diverse.
  • Paragonabile fornisce il compareTo() metodo per ordinare gli elementi Java, mentre Comparator fornisce il file compare() metodo per ordinare gli elementi Java.
  • Un'interfaccia comparabile è presente in java.lang pacchetto, mentre l'interfaccia Comparator è presente in java.util pacchetto.
  • Comparable fornisce una singola sequenza di ordinamento, mentre Comparator fornisce più sequenze di ordinamento.
  • Comparable influisce sulla classe originale, mentre Comparator non influisce sulla classe originale.

Differenza tra comparabile e comparatore
Differenza tra comparabile e comparatore

Qui ho analizzato la differenza tra comparabile e comparatore e ne valuterò in modo completo i pro e i contro.

Ciò che è paragonabile in Java?

paragonabile in Java è un oggetto che si confronta con un altro oggetto. Aiuta a ordinare l'elenco degli oggetti personalizzati. Il Java.lang.L'interfaccia comparabile dovrebbe essere implementata da una classe per confrontare le sue istanze. Una serie di oggetti che implementano un'interfaccia comparabile viene ordinata automaticamente per Arrays.sort e dell' Collections.sort metodi.

Metodo utilizzato in Comparable

Vorrei evidenziare un metodo importante che utilizzo spesso nell'interfaccia Comparable:

Confrontare con():

Il metodo CompareTo() viene utilizzato per eseguire l'ordinamento naturale su una stringa. Il significato di ordinamento naturale è l'ordine di ordinamento che si applica all'oggetto, ad esempio, ordine numerico per l'ordinamento di interi, ordine alfabetico per String, ecc.

La sintassi di CompareTo() il metodo è il seguente:

int compareTo(T obj)

Nella sintassi precedente, T indica il tipo di oggetti che confronterai.

CompareTo() Il metodo confronta l'oggetto con T obj.

Produzione:

  • Restituisce 0 se i valori sono uguali.
  • Se l'oggetto ha un valore inferiore, questo metodo restituisce un valore negativo.
  • Se l'oggetto ha un valore più alto, restituisce un valore positivo.

Un esempio di comparabile in Java

Il seguente programma di Java un esempio comparabile mostra il confronto di due caratteri, "a" e "b". Il carattere “a” viene prima della “b” in ordine alfabetico.

Pertanto, l'output è -1. Il carattere “b” viene dopo la “a” in ordine alfabetico. Quindi, l'output è 1. I caratteri “a” e “b” sono entrambi equivalenti. Quindi l’output è 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"));
    }
}

Uscita

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

In cosa consiste un comparatore Java?

Un comparatore in Java è un oggetto per confrontare diversi oggetti di classi diverse. L'interfaccia del comparatore in Java viene utilizzato anche per disporre gli oggetti delle classi definite dall'utente. Include due importanti metodi di interfaccia del comparatore noti come confronto (Oggetto obj1, Oggetto obj2) ed equals (Elemento oggetto).

Metodo utilizzato nel Comparatore

Nella mia pratica, mi affido spesso ai seguenti metodi critici dell'interfaccia del comparatore:

Confrontare():

Compare() consente di ordinare oggetti. Per fare ciò, devi creare una classe che implementi un'interfaccia comparatrice. Successivamente, è necessario sovrascrivere il relativo metodo di confronto.

La sintassi di compare() il metodo è il seguente:

compare(Object obj1, Object obj2)

Nella sintassi precedente, obj1 e obj2 sono due oggetti che devi confrontare utilizzando il metodo compare(). compare() metodo.

Produzione:

  • Restituisce un intero negativo se il primo argomento è minore del secondo.
  • Restituisce zero se il primo argomento e il secondo argomento sono uguali.
  • Questo metodo può restituire un intero positivo nel caso in cui il primo argomento sia maggiore del secondo.

È necessario assicurarsi che la relazione sia transitiva. Ad esempio, ((compare(a, b)>0) && (compare(b, c)>0)) che implica compare(a, c)>0.

Un esempio di comparabile in Java

Nel sotto Java esempio comparativo, ce ne sono 6 variabili. “x”, “y”, “p”, “q”, “r” e “s”. L'uscita è -1 poiché il valore di “x”, 20 è inferiore al valore di “y”, 30. L'uscita è 0 perché il valore di “p”, 40 è uguale al valore di “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)); 
    } 
}

Produzione:

-1
0
1

Equivale():

Equals() verifica se il numero oggetto è uguale all'oggetto passato come argomento oppure no.

La sintassi di equals() il metodo è il seguente:

public boolean equals(Object o)

Questo metodo accetta due parametri: 1) qualsiasi oggetto e 2) un valore restituito. Restituisce vero se l'argomento passato non è null ed è un oggetto di tipo simile avente lo stesso valore numerico.

Esempio del metodo Uguale:

Nell'esempio seguente, confronterò le quattro variabili tra loro. Tre variabili sono di tipo intero e una è di tipo short. Il primo risultato è falso poiché il valore di p, che è 5, non è uguale al valore di q, che è 20.

Il secondo risultato è vero perché il valore delle variabili p e r è lo stesso, ovvero 5. Infine, l'output è falso, poiché alle variabili p e s sono assegnati valori diversi.

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));
   }
}

Uscita

false
true
false

Differenze tra comparabile e comparatore in Java

Vedo spesso confusione tra Java Comparabile e Comparatore; ecco la differenza principale:

Differenza tra comparabile e comparatore in Java
Differenza tra comparabile e comparatore in Java

Base di confronto paragonabile Comparatore
Metodo Fornisce comparabili compareTo() metodo per ordinare gli elementi Java. Il comparatore fornisce compare() metodo per ordinare gli elementi Java.
CONFEZIONE Un'interfaccia comparabile è presente in java.lang pacchetto. È presente un'interfaccia comparatrice java.util pacchetto.
Logica dell'ordinamento La logica di ordinamento deve essere nella stessa classe dell'oggetto che si intende ordinare. La logica dell'ordinamento dovrebbe essere in classi separate per scrivere ordinamenti diversi in base a diversi attributi degli oggetti.
Oggetto di classe La classe di cui vuoi ordinare gli oggetti deve implementare l'interfaccia Comparable. Una classe di cui si desidera ordinare gli oggetti non ha bisogno di implementare un'interfaccia comparatrice.
Sequenze di ordinamento Fornisce singole sequenze di ordinamento. Fornisce più sequenze di ordinamento.
Ordinamento Questo metodo può ordinare i dati secondo l'ordinamento naturale. Questo metodo ordina i dati in base all'ordinamento personalizzato.
Classe Colpisce la classe originale. cioè, la classe effettiva viene modificata. Non influisce sulla classe originale, ovvero la classe effettiva non viene modificata.
Impiego Implementato frequentemente nell'API da Calendar, classi Wrapper, Date e
Stringa.
È implementato per ordinare istanze di classi di terze parti.
Realizzare Tutte le classi wrapper e le classi stringa implementano interfacce comparabili. Le uniche classi implementate di Comparator sono Collator e RuleBasedColator.

migliori pratiche durante l'utilizzo di comparatore e comparabile in Java

  • Utilizzare un'interfaccia comparabile quando il confronto è standard per la classe specifica.
  • Puoi usare lambda con un comparatore.
  • Molte delle classi principali disponibili implementano un'interfaccia comparabile.
  • È possibile utilizzare TreeSet e TreeMap durante l'ordinamento di Set o Map.
  • compareTo() Il metodo funziona sia con il comparatore che con il comparabile.
  • Utilizza l'interfaccia del comparatore solo quando < richiedi maggiore flessibilità.
  • compareTo() restituirà un numero intero positivo se il primo oggetto è maggiore dell'altro, negativo se è inferiore e zero se entrambi sono uguali.

Come scegliere tra un comparabile e un comparatore

In conclusione, la mia esperienza pratica suggerisce che sfruttare Comparable e Comparator in Java aumenta significativamente il controllo che abbiamo sull'ordinamento dei dati, migliorando sia le prestazioni che la funzionalità.