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.lang
pakke, hvorimod Comparator-grænsefladen er til stede ijava.util
pakke. - 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.