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 gircompare()
metode for å sortere elementer i Java. - Et sammenlignbart grensesnitt er til stede i
java.lang
pakken, mens Comparator-grensesnittet er til stede ijava.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.

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:
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.