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.

Oppsummer dette innlegget med: