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.langpakken, mens Comparator-grensesnittet er til stede ijava.utilpakke. - 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.
