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 and 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.
  • Migliori compareTo() Il metodo funziona sia con il comparatore che con il comparabile.
  • Utilizza l'interfaccia del comparatore solo quando < richiedi maggiore flessibilitร .
  • Migliori 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ร .

Riassumi questo post con: