Sammenlignelig vs Comparator i Java
Nรธgleforskel mellem sammenlignelig og komparator i Java
- Sammenlignes i Java er et objekt til at sammenligne sig selv med et andet objekt, hvorimod Comparator er et objekt til at sammenligne forskellige objekter af forskellige klasser.
- Sammenlignelige giver
compareTo()metode til at sortere elementer i Java, hvorimod Comparator givercompare()metode til at sortere elementer i Java. - En sammenlignelig grรฆnseflade er til stede i
java.langpakke, hvorimod Comparator-grรฆnsefladen er til stede ijava.utilpakke. - Sammenlignelig giver en enkelt sorteringssekvens, mens Comparator giver flere sorteringssekvenser.
- Sammenlignelig pรฅvirker den originale klasse, hvorimod Comparator ikke pรฅvirker den originale klasse.

Her har jeg analyseret forskellen mellem sammenlignelig og Comparator og vil grundigt evaluere deres fordele og ulemper.
Hvad er sammenligneligt i Java?
Sammenlignelig in Java er et objekt, der sammenligner sig med et andet objekt. Det hjรฆlper med at sortere listen over brugerdefinerede objekter. De Java.lang.Den sammenlignelige grรฆnseflade bรธr implementeres af en klasse for at sammenligne dens forekomster. En rรฆkke objekter, der implementerer en sammenlignelig grรฆnseflade, sorteres automatisk efter Arrays.sort og Collections.sort metoder.
Metode brugt i Comparable
Jeg vil gerne fremhรฆve en vigtig metode, som jeg ofte bruger i den sammenlignelige grรฆnseflade:
Sammenligne med():
CompareTo() metoden bruges til at udfรธre naturlig sortering pรฅ en streng. Betydningen af โโnaturlig sortering er den sorteringsrรฆkkefรธlge, der gรฆlder for objektet, fx numerisk rรฆkkefรธlge til sortering af heltal, alfabetisk rรฆkkefรธlge for streng osv.
Syntaksen for CompareTo() metoden er som fรธlger:
int compareTo(T obj)
I ovenstรฅende syntaks angiver T den type objekter, du vil sammenligne.
CompareTo() metode sammenligner objektet med T obj.
Output:
- Det returnerer 0, hvis vรฆrdierne er ens.
- Hvis objektet har en lavere vรฆrdi, returnerer denne metode en negativ vรฆrdi.
- Hvis objektet har en hรธjere vรฆrdi, returnerer det en positiv vรฆrdi.
Et eksempel pรฅ sammenlignelig i Java
Fรธlgende program af Java sammenligneligt eksempel viser sammenligningen af โโto tegn, "a" og "b". Tegnet "a" kommer alfabetisk foran "b".
Derfor er outputtet -1. Tegnet "b" kommer efter "a" alfabetisk. Derfor er outputtet 1. Tegnene "a" og "b" er begge รฆkvivalente. Derfor er outputtet 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"));
}
}
Produktion
Compare To 'a' b is : -1 Compare To 'b' a is : 1 Compare To 'b' b is : 0
Hvad er en komparator i Java?
En komparator in Java er et objekt til at sammenligne forskellige objekter af forskellige klasser. Komparatorgrรฆnsefladen i Java bruges ogsรฅ til at arrangere objekterne i brugerdefinerede klasser. Det inkluderer to vigtige komparatorgrรฆnseflademetoder kendt som sammenligning (Object obj1, Object obj2) og equals (Object element).
Metode brugt i Comparator
I min praksis stoler jeg ofte pรฅ fรธlgende kritiske metoder til komparatorgrรฆnsefladen:
Sammenligne():
Compare() giver dig mulighed for at bestille objekter. For at gรธre dette skal du oprette en klasse, der implementerer en komparatorgrรฆnseflade. Herefter skal du tilsidesรฆtte dens sammenligningsmetode.
Syntaksen af compare() metoden er som fรธlger:
compare(Object obj1, Object obj2)
I ovenstรฅende syntaks er obj1 og obj2 to objekter, som du skal sammenligne med compare()-metoden. compare() fremgangsmรฅde.
Output:
- Det returnerer et negativt heltal, hvis det fรธrste argument er mindre end det andet.
- Returnerer nul, hvis det fรธrste argument og det andet argument er ens.
- Denne metode kan returnere et positivt heltal i tilfรฆlde af, at det fรธrste argument er stรธrre end det andet.
Du skal sikre, at relationen er transitiv. For eksempel ((sammenlign(a, b)>0) && (sammenlign(b, c)>0)), hvilket indebรฆrer sammenligne(a, c)>0.
Et eksempel pรฅ sammenlignelig i Java
I nedenstรฅende Java sammenligningseksempel, der er 6 variabler. "x", "y", "p", "q", "r" og "s". Outputtet er -1, da vรฆrdien af โโ"x", 20 er mindre end vรฆrdien af โโ"y", 30. Outputtet er 0, fordi vรฆrdien af โโ"p", 40 er lig med vรฆrdien af โโ"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));
}
}
Output:
-1 0 1
Lige med():
Equals() verificerer, om nummerobjektet er lig med objektet, som sendes som et argument eller ej.
Syntaksen af equals() metoden er som fรธlger:
public boolean equals(Object o)
Denne metode tager to parametre: 1) ethvert objekt og 2) en returvรฆrdi. Det returnerer sandt, hvis det bestรฅede argument ikke er null og er et objekt af en lignende type med samme numeriske vรฆrdi.
Equals-metodeeksempel:
I nedenstรฅende eksempel vil jeg sammenligne de fire variabler med hinanden. Tre variable er af typen heltal, og en er af typen kort. Det fรธrste resultat er falsk, da vรฆrdien af โโp, som er 5, ikke er lig med vรฆrdien af โโq, som er 20.
Det andet resultat er sandt, fordi vรฆrdien af โโvariablene p og r er den samme, hvilket er 5. Endelig er outputtet falsk, da variablene p og s har forskellige tildelte vรฆrdier.
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));
}
}
Produktion
false true false
Forskelle mellem Comparable og Comparator i Java
Jeg ser ofte forvirring mellem Java Sammenlignelig og Comparator; her er den vigtigste forskel:

| Sammenligningsgrundlag | Sammenlignelig | komparator |
|---|---|---|
| Metode | Sammenlignelige giver compareTo() metode til at sortere elementer i Java. |
Komparator giver compare() metode til at sortere elementer i Java. |
| Pakke | En sammenlignelig grรฆnseflade er til stede i java.lang pakke. |
En komparatorgrรฆnseflade er til stede i java.util pakke. |
| Sorterings logik | Sorteringslogikken skal vรฆre i samme klasse som det objekt, du skal sortere. | Logikken ved sortering bรธr vรฆre i separate klasser for at skrive forskellige sorter baseret pรฅ forskellige attributter af objekter. |
| Klasseobjekt | Klassen, hvis objekter du vil sortere, skal implementere Comparable-grรฆnsefladen. | En klasse, hvis objekter du vil sortere, behรธver ikke at implementere en komparatorgrรฆnseflade. |
| Sortering af sekvenser | Det giver enkelte sorteringssekvenser. | Det giver flere sorteringssekvenser. |
| Sorteringsrรฆkkefรธlge | Denne metode kan sortere dataene efter den naturlige sorteringsrรฆkkefรธlge. | Denne metode sorterer dataene i henhold til den tilpassede sorteringsrรฆkkefรธlge. |
| Klasse | Det pรฅvirker den oprindelige klasse. dvs. den faktiske klasse รฆndres. | Det pรฅvirker ikke den oprindelige klasse, dvs. den faktiske klasse รฆndres ikke. |
| Brug | Implementeret ofte i API'et af kalender, Wrapper-klasser, dato og Snor. |
Det er implementeret til at sortere forekomster af tredjepartsklasser. |
| Implement | Alle indpakningsklasser og strengklasser implementerer sammenlignelige grรฆnseflader. | De eneste implementerede klasser af Comparator er Collator og RuleBasedColator. |
Bedste praksis, mens du bruger komparator og sammenlignelig i Java
- Brug en sammenlignelig grรฆnseflade, nรฅr sammenligningen er standard for den specifikke klasse.
- Du kan bruge lambdaer med en komparator.
- Mange af de tilgรฆngelige kerneklasser implementerer en sammenlignelig grรฆnseflade.
- Det er muligt at bruge TreeSet og TreeMap, mens du sorterer Set eller Map.
-
compareTo()metoden fungerer med komparator sรฅvel som sammenlignelig. - Brug kun komparatorgrรฆnsefladen, nรฅr du < krรฆver mere fleksibilitet.
-
compareTo()metoden returnerer et positivt heltal, hvis det fรธrste objekt er stรธrre end det andet, negativt, hvis det er lavere, og nul, hvis begge er ens.
Sรฅdan vรฆlger du mellem en sammenlignelig og en komparator
Afslutningsvis tyder min praktiske erfaring pรฅ, at udnyttelse af Comparable og Comparator i Java lรธfter markant den kontrol, vi har over datasortering, hvilket forbedrer bรฅde ydeevne og funktionalitet.
