Sammenlignbar vs Comparator i Java

Nøkkelforskjell mellom sammenlignbar og komparator i Java

  • Sammenlignbar i Java er et objekt for å sammenligne seg selv med et annet objekt, mens Comparator er et objekt for å sammenligne forskjellige objekter av forskjellige klasser.
  • Sammenlignbare gir compareTo() metode for å sortere elementer i Java, mens Comparator gir compare() metode for å sortere elementer i Java.
  • Et sammenlignbart grensesnitt er til stede i java.lang pakken, mens Comparator-grensesnittet er til stede i java.util pakke.
  • Comparable gir en enkelt sorteringssekvens, mens Comparator gir flere sorteringssekvenser.
  • Sammenlignbar påvirker den opprinnelige klassen, mens Comparator ikke påvirker den opprinnelige klassen.

Forskjellen mellom sammenlignbar og komparator
Forskjellen mellom sammenlignbar og komparator

Her har jeg analysert forskjellen mellom sammenlignbar og komparator og vil grundig evaluere fordeler og ulemper.

Hva er sammenlignbart i Java?

Sammenlignelig in Java er et objekt som sammenligner seg med et annet objekt. Det hjelper å sortere listen over egendefinerte objekter. De Java.lang.Det sammenlignbare grensesnittet bør implementeres av en klasse for å sammenligne forekomstene. En rekke objekter som implementerer et sammenlignbart grensesnitt sorteres automatisk etter Arrays.sort og Collections.sort metoder.

Metode brukt i Comparable

Jeg vil gjerne fremheve en viktig metode som jeg ofte bruker i det sammenlignbare grensesnittet:

Sammenlign med():

CompareTo()-metoden brukes til å utføre naturlig sortering på en streng. Betydningen av naturlig sortering er sorteringsrekkefølgen som gjelder for objektet, for eksempel numerisk rekkefølge for sortering av heltall, alfabetisk rekkefølge for streng, etc.

Syntaksen til CompareTo() metoden er som følger:

int compareTo(T obj)

I syntaksen ovenfor, betyr T typen objekter du skal sammenligne.

CompareTo() metoden sammenligner objektet med T obj.

Utgang:

  • Den returnerer 0 hvis verdiene er like.
  • Hvis objektet har en lavere verdi, returnerer denne metoden en negativ verdi.
  • Hvis objektet har en høyere verdi, returnerer det en positiv verdi.

Et eksempel på sammenlignbar i Java

Følgende program av Java sammenlignbart eksempel viser sammenligningen av to tegn, "a" og "b". Tegnet "a" kommer alfabetisk foran "b".

Derfor er utgangen -1. Tegnet "b" kommer etter "a" alfabetisk. Derfor er utgangen 1. Tegnene "a" og "b" er begge ekvivalente. Derfor er utgangen 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"));
    }
}

Produksjon

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

Hva er en komparator i Java?

En komparator in Java er et objekt for å sammenligne forskjellige objekter av forskjellige klasser. Komparatorgrensesnittet i Java brukes også til å ordne objektene til brukerdefinerte klasser. Den inkluderer to viktige komparatorgrensesnittmetoder kjent som compare (Object obj1, Object obj2) og equals (Object element).

Metode brukt i Comparator

I min praksis stoler jeg ofte på følgende kritiske metoder for komparatorgrensesnittet:

Sammenligne():

Compare() lar deg bestille objekter. For å gjøre dette må du lage en klasse som implementerer et komparatorgrensesnitt. Etter dette må du overstyre sammenligningsmetoden.

Syntaksen til compare() metoden er som følger:

compare(Object obj1, Object obj2)

I syntaksen ovenfor er obj1 og obj2 to objekter som du må sammenligne med compare()-metoden. compare() metoden.

Utgang:

  • Det returnerer et negativt heltall hvis det første argumentet er mindre enn det andre.
  • Returnerer null hvis det første argumentet og det andre argumentet er like.
  • Denne metoden kan returnere et positivt heltall i tilfelle det første argumentet er større enn det andre.

Du må sørge for at forholdet er transitivt. For eksempel, ((sammenlign(a, b)>0) && (sammenlign(b, c)>0)) som innebærer sammenligne(a, c)>0.

Et eksempel på sammenlignbar i Java

Nedenfor Java sammenligningseksempel, det er 6 variabler. "x", "y", "p", "q", "r" og "s". Utgangen er -1 som verdien av "x", 20 er mindre enn verdien av "y", 30. Utgangen er 0 fordi verdien av "p", 40 er lik verdien av "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)); 
    } 
}

Utgang:

-1
0
1

Er lik():

Equals() verifiserer om tallobjektet er lik objektet, som sendes som et argument, eller ikke.

Syntaksen til equals() metoden er som følger:

public boolean equals(Object o)

Denne metoden tar to parametere: 1) ethvert objekt og 2) en returverdi. Det returnerer sant hvis det beståtte argumentet ikke er null og er et objekt av lignende type med samme numeriske verdi.

Eksempel på metode for lik:

I eksemplet nedenfor skal jeg sammenligne de fire variablene med hverandre. Tre variabler er av typen heltall, og en er av typen kort. Det første resultatet er usant ettersom verdien av p, som er 5, ikke er lik verdien av q, som er 20.

Det andre resultatet er sant fordi verdien av variablene p og r er den samme, som er 5. Til slutt er utdata usann, siden variablene p og s har forskjellige tilordnede verdier.

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

Produksjon

false
true
false

Forskjeller mellom sammenlignbar og komparator i Java

Jeg ser ofte forvirring mellom Java Sammenlignbar og komparator; her er hovedforskjellen:

Forskjellen mellom sammenlignbar og komparator i Java
Forskjellen mellom sammenlignbar og komparator i Java

Sammenligningsgrunnlag Sammenlignelig Komparator
Metode Sammenlignbare tilbud compareTo() metode for å sortere elementer i Java. Komparator gir compare() metode for å sortere elementer i Java.
Pakke Et sammenlignbart grensesnitt er til stede i java.lang pakke. Et komparatorgrensesnitt er til stede i java.util pakke.
Logikk for sortering Logikken for sortering må være i samme klasse som objektet du skal sortere. Logikken for sortering bør være i separate klasser for å skrive forskjellige sorteringer basert på forskjellige attributter til objekter.
Klasseobjekt Klassen hvis objekter du vil sortere, må implementere Comparable-grensesnittet. En klasse hvis objekter du vil sortere trenger ikke å implementere et komparatorgrensesnitt.
Sorteringssekvenser Den gir enkelt sorteringssekvenser. Det gir flere sorteringssekvenser.
Sorteringsrekkefølge Denne metoden kan sortere dataene i henhold til den naturlige sorteringsrekkefølgen. Denne metoden sorterer dataene i henhold til den tilpassede sorteringsrekkefølgen.
Klasse Det påvirker den opprinnelige klassen. dvs. den faktiske klassen er endret. Det påvirker ikke den opprinnelige klassen, dvs. den faktiske klassen endres ikke.
bruk Implementert ofte i API av Kalender, Wrapper-klasser, Dato og
String.
Den er implementert for å sortere forekomster av tredjepartsklasser.
Implementere Alle innpakningsklasser og strengklasser implementerer sammenlignbare grensesnitt. De eneste implementerte klassene av Comparator er Collator og RuleBasedColator.

Beste fremgangsmåter ved bruk av Comparator og Comparable in Java

  • Bruk et sammenlignbart grensesnitt når sammenligningen er standard for den spesifikke klassen.
  • Du kan bruke lambdaer med en komparator.
  • Mange av kjerneklassene som er tilgjengelige implementerer et sammenlignbart grensesnitt.
  • Det er mulig å bruke TreeSet og TreeMap mens du sorterer Set eller Map.
  • Ocuco compareTo() metoden fungerer med komparator så vel som sammenlignbar.
  • Bruk komparatorgrensesnittet bare når du < krever mer fleksibilitet.
  • Ocuco compareTo() metoden vil returnere et positivt heltall hvis det første objektet er større enn det andre, negativt hvis det er lavere, og null hvis begge er like.

Hvordan velge mellom en sammenlignbar og en komparator

Avslutningsvis, min praktiske erfaring tilsier at utnytte Comparable og Comparator i Java øker kontrollen vi har over datasortering betydelig, og forbedrer både ytelse og funksjonalitet.