Jämförbar vs Comparator in Java
Nyckelskillnaden mellan Comparable och Comparator in Java
- Jämförbar i Java är ett objekt för att jämföra sig själv med ett annat objekt, medan Comparator är ett objekt för att jämföra olika objekt av olika klasser.
- Jämförbara ger
compareTo()
metod att sortera element i Java, medan Comparator tillhandahållercompare()
metod att sortera element i Java. - Ett jämförbart gränssnitt finns i
java.lang
paket, medan Comparator-gränssnittet finns ijava.util
paket. - Comparable ger en enda sorteringssekvens, medan Comparator tillhandahåller flera sorteringssekvenser.
- Comparable påverkar originalklassen, medan Comparator inte påverkar originalklassen.

Här har jag analyserat skillnaden mellan comparable och Comparator och kommer utförligt att utvärdera deras för- och nackdelar.
Vad är jämförbart i Java?
Jämförbar in Java är ett objekt som jämför sig med ett annat objekt. Det hjälper till att sortera listan med anpassade objekt. De Java.lang.Det jämförbara gränssnittet bör implementeras av en klass för att jämföra dess instanser. En array av objekt som implementerar ett jämförbart gränssnitt sorteras automatiskt efter Arrays.sort
och Collections.sort
metoder.
Metod som används i Comparable
Jag skulle vilja lyfta fram en viktig metod som jag ofta använder i det jämförbara gränssnittet:
Jämföra med():
CompareTo()-metoden används för att utföra naturlig sortering på en sträng. Innebörden av naturlig sortering är den sorteringsordning som gäller för objektet, t.ex. numerisk ordning för att sortera heltal, alfabetisk ordning för sträng, etc.
Syntaxen för CompareTo()
metoden är som följer:
int compareTo(T obj)
I ovanstående syntax betyder T vilken typ av objekt du ska jämföra.
CompareTo()
metod jämför objektet med T obj.
Produktion:
- Den returnerar 0 om värdena är lika.
- Om objektet har ett lägre värde returnerar denna metod ett negativt värde.
- Om objektet har ett högre värde, returnerar det ett positivt värde.
Ett exempel på jämförbar i Java
Följande program av Java jämförbart exempel visar jämförelsen av två tecken, "a" och "b". Tecknet "a" kommer före "b" alfabetiskt.
Därför är utgången -1. Tecknet "b" kommer efter "a" i alfabetisk ordning. Följaktligen är utgången 1. Tecken "a" och "b" är båda ekvivalenta. Därför är utgången 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
Vad är en komparator i Java?
En komparator in Java är ett objekt för att jämföra olika objekt av olika klasser. Jämförelsegränssnittet i Java används också för att ordna objekten i användardefinierade klasser. Den innehåller två viktiga komparatorgränssnittsmetoder kända som compare (Object obj1, Object obj2) och equals (Object element).
Metod som används i Comparator
I min praktik förlitar jag mig ofta på följande kritiska metoder för komparatorgränssnittet:
Jämföra():
Compare()
gör att du kan beställa objekt. För att göra detta måste du skapa en klass som implementerar ett komparatorgränssnitt. Efter detta måste du åsidosätta dess jämförelsemetod.
Syntaxen för compare()
metoden är som följer:
compare(Object obj1, Object obj2)
I ovanstående syntax är obj1 och obj2 två objekt som du måste jämföra med metoden compare(). compare()
metod.
Produktion:
- Det returnerar ett negativt heltal om det första argumentet är mindre än det andra.
- Returnerar noll om det första argumentet och det andra argumentet är lika.
- Denna metod kan returnera ett positivt heltal i händelse av att det första argumentet är större än det andra.
Du måste se till att relationen är transitiv. Till exempel ((jämför(a, b)>0) && (jämför(b, c)>0)) vilket innebär jämför(a, c)>0.
Ett exempel på jämförbar i Java
I nedanstående Java jämförelseexempel, det finns 6 variabler. "x", "y", "p", "q", "r" och "s". Utgången är -1 eftersom värdet på "x", 20 är mindre än värdet på "y", 30. Utgången är 0 eftersom värdet på "p", 40 är lika med värdet på "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)); } }
Produktion:
-1 0 1
Lika():
Equals()
verifierar om nummerobjektet är lika med objektet, som skickas som ett argument, eller inte.
Syntaxen för equals()
metoden är som följer:
public boolean equals(Object o)
Denna metod tar två parametrar: 1) vilket objekt som helst och 2) ett returvärde. Det returnerar sant om det godkända argumentet inte är null och är ett objekt av liknande typ med samma numeriska värde.
Equals-metodexempel:
I exemplet nedan kommer jag att jämföra de fyra variablerna med varandra. Tre variabler är av typen heltal, och en är av typen kort. Det första resultatet är falskt eftersom värdet på p, som är 5, inte är lika med värdet på q, vilket är 20.
Det andra resultatet är sant eftersom värdet på variablerna p och r är detsamma, vilket är 5. Slutligen är resultatet falskt, eftersom variablerna p och s har olika tilldelade värden.
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
Skillnader mellan Comparable och Comparator i Java
Jag ser ofta förvirring mellan Java Comparable och Comparator; här är den största skillnaden:
Jämförelsegrund | Jämförbar | Komparator |
---|---|---|
Metod | Jämförbara ger compareTo() metod att sortera element i Java. |
Komparator ger compare() metod att sortera element i Java. |
Paket | Ett jämförbart gränssnitt finns i java.lang paket. |
Ett komparatorgränssnitt finns i java.util paket. |
Sorteringslogik | Sorteringslogiken måste vara i samma klass som objektet du ska sortera. | Logiken för sortering bör vara i separata klasser för att skriva olika sorteringar baserat på olika attribut för objekt. |
Klassobjekt | Klassen vars objekt du vill sortera måste implementera Comparable-gränssnittet. | En klass vars objekt du vill sortera behöver inte implementera ett komparatorgränssnitt. |
Sorteringssekvenser | Det ger enstaka sorteringssekvenser. | Det ger flera sorteringssekvenser. |
Sorteringsordning | Denna metod kan sortera data enligt den naturliga sorteringsordningen. | Denna metod sorterar data enligt den anpassade sorteringsordningen. |
Klass | Det påverkar originalklassen. dvs den faktiska klassen ändras. | Det påverkar inte den ursprungliga klassen, dvs den faktiska klassen ändras inte. |
Användning | Implementeras ofta i API:t av Kalender, Wrapper-klasser, Datum och Sträng. |
Det är implementerat för att sortera instanser av tredje parts klasser. |
Implementera | Alla omslagsklasser och strängklasser implementerar jämförbara gränssnitt. | De enda implementerade klasserna av Comparator är Collator och RuleBasedColator. |
Bästa praxis när du använder Comparator och Comparable in Java
- Använd ett jämförbart gränssnitt när jämförelsen är standard för den specifika klassen.
- Du kan använda lambdas med en komparator.
- Många av de tillgängliga kärnklasserna implementerar ett jämförbart gränssnitt.
- Det är möjligt att använda TreeSet och TreeMap medan du sorterar Set eller Map.
- Smakämnen
compareTo()
Metoden fungerar med komparator såväl som jämförbar. - Använd komparatorgränssnittet endast när du < kräver mer flexibilitet.
- Smakämnen
compareTo()
metoden returnerar ett positivt heltal om det första objektet är större än det andra, negativt om det är lägre och noll om båda är samma.
Hur man väljer mellan en jämförbar och en komparator
Slutligen, min praktiska erfarenhet tyder på att utnyttja Comparable och Comparator i Java höjer avsevärt kontrollen vi har över datasortering, vilket förbättrar både prestanda och funktionalitet.