Usporedivo u usporedbi Java
Ključna razlika između Comparable i Comparator in Java
- Usporedivo u Java je objekt za usporedbu s drugim objektom, dok je Comparator objekt za usporedbu različitih objekata različitih klasa.
- Comparable pruža
compareTo()
metoda za sortiranje elemenata Java, dok Comparator pružacompare()
metoda za sortiranje elemenata Java. - Usporedivo sučelje prisutno je u
java.lang
paket, dok je sučelje Comparator prisutno ujava.util
paket. - Comparable pruža jednu sekvencu sortiranja, dok Comparator pruža više sekvenci sortiranja.
- Comparable utječe na izvornu klasu, dok Comparator ne utječe na izvornu klasu.

Ovdje sam analizirao razliku između Comparable i Comparator i sveobuhvatno ću procijeniti njihove prednosti i nedostatke.
Što je usporedivo u Java?
Usporedive in Java je objekt koji se uspoređuje s drugim objektom. Pomaže sortirati popis prilagođenih objekata. The Java.lang.Uporedivo sučelje treba implementirati klasa kako bi se usporedile njegove instance. Niz objekata koji implementiraju usporedivo sučelje automatski se sortira prema Arrays.sort
i Collections.sort
metode.
Metoda korištena u Comparable
Želio bih istaknuti važnu metodu koju često koristim u sučelju Comparable:
Usporedi s():
Metoda CompareTo() koristi se za izvođenje prirodnog sortiranja niza. Značenje prirodnog sortiranja je redoslijed sortiranja koji se primjenjuje na objekt, npr. numerički redoslijed za sortiranje cijelih brojeva, abecedni red za niz, itd.
Sintaksa CompareTo()
metoda je sljedeća:
int compareTo(T obj)
U gornjoj sintaksi, T označava vrstu objekata koje ćete uspoređivati.
CompareTo()
metoda uspoređuje objekt s T obj.
Izlaz:
- Vraća 0 ako su vrijednosti jednake.
- Ako objekt ima nižu vrijednost, tada ova metoda vraća negativnu vrijednost.
- Ako objekt ima veću vrijednost, vraća pozitivnu vrijednost.
Primjer usporedivog u Java
Sljedeći program od Java usporedivi primjer prikazuje usporedbu dva znaka, “a” i “b”. Znak "a" dolazi ispred "b" po abecedi.
Stoga je izlaz -1. Znak "b" dolazi nakon "a" po abecedi. Dakle, izlaz je 1. Oba znaka "a" i "b" su ekvivalentna. Dakle, izlaz je 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")); } }
Izlaz
Compare To 'a' b is : -1 Compare To 'b' a is : 1 Compare To 'b' b is : 0
Što je komparator u Java?
Usporednik in Java je objekt za usporedbu različitih objekata različitih klasa. Sučelje komparatora u Java također se koristi za raspoređivanje objekata korisnički definiranih klasa. Uključuje dvije važne metode sučelja komparatora poznate kao usporedba (Object obj1, Object obj2) i jednako (Object element).
Metoda korištena u Comparatoru
U svojoj praksi često se oslanjam na sljedeće kritične metode sučelja komparatora:
Usporedi():
Compare()
omogućuje naručivanje objekata. Da biste to učinili, morate stvoriti klasu koja implementira sučelje komparatora. Nakon toga morate nadjačati njegovu metodu usporedbe.
Sintaksa od compare()
metoda je sljedeća:
compare(Object obj1, Object obj2)
U gornjoj sintaksi, obj1 i obj2 su dva objekta koja morate usporediti pomoću metode compare(). compare()
metoda.
Izlaz:
- Vraća negativan cijeli broj ako je prvi argument manji od drugog.
- Vraća nulu ako su prvi i drugi argument jednaki.
- Ova metoda može vratiti pozitivan cijeli broj u slučaju da je prvi argument veći od drugog.
Morate osigurati da je odnos tranzitivan. Na primjer, ((usporedi(a, b)>0) && (usporedi(b, c)>0)) što implicira usporedi (a, c)>0.
Primjer usporedivog u Java
U nastavku Java primjer komparatora, ima ih 6 varijable. “x”, “y”, “p”, “q”, “r” i “s”. Izlaz je -1 kao vrijednost "x", 20 je manji od vrijednosti "y", 30. Izlaz je 0 jer je vrijednost "p", 40 jednaka vrijednosti "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)); } }
Izlaz:
-1 0 1
Jednako():
Equals()
provjerava je li objekt broj jednak objektu koji se prosljeđuje kao argument ili ne.
Sintaksa od equals()
metoda je sljedeća:
public boolean equals(Object o)
Ova metoda uzima dva parametra: 1) bilo koji objekt i 2) povratnu vrijednost. Vraća true ako proslijeđeni argument nije null i objekt je sličnog tipa koji ima istu numeričku vrijednost.
Primjer metode Equals:
U donjem primjeru, uspoređivat ću četiri varijable jednu s drugom. Tri varijable su tipa integer, a jedna je tipa short. Prvi rezultat je lažan jer vrijednost p, koja je 5, nije jednaka vrijednosti q, koja je 20.
Drugi rezultat je istinit jer je vrijednost varijabli p i r ista, a to je 5. Na kraju, izlaz je netočan, jer varijable p i s imaju različite dodijeljene vrijednosti.
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)); } }
Izlaz
false true false
Razlike između Comparable i Comparator u Java
Često vidim zabunu između Java Usporedni i Usporedni; evo glavne razlike:
Osnova usporedbe | Usporedive | Usporednik |
---|---|---|
način | Usporedivi pruža compareTo() metoda za sortiranje elemenata Java. |
Usporednik pruža compare() metoda za sortiranje elemenata Java. |
Paket | Usporedivo sučelje prisutno je u java.lang paket. |
Prisutno je sučelje za usporedbu java.util paket. |
Logika sortiranja | Logika sortiranja mora biti u istoj klasi kao i objekt koji ćete sortirati. | Logika sortiranja trebala bi biti u zasebnim klasama za pisanje različitih sortiranja na temelju različitih atributa objekata. |
Objekt klase | Klasa čije objekte želite sortirati mora implementirati sučelje Comparable. | Klasa čije objekte želite sortirati ne mora implementirati sučelje za usporedbu. |
Razvrstavanje sekvenci | Omogućuje pojedinačne nizove sortiranja. | Omogućuje više sekvenci sortiranja. |
Redoslijed sortiranja | Ova metoda može sortirati podatke prema prirodnom redoslijedu sortiranja. | Ova metoda sortira podatke prema prilagođenom redoslijedu sortiranja. |
Klasa | Utječe na izvornu klasu. tj. mijenja se stvarna klasa. | Ne utječe na izvornu klasu, tj. stvarna klasa se ne mijenja. |
Upotreba | Često se implementira u API-ju pomoću kalendara, klasa omotača, datuma i Niz. |
Implementiran je za sortiranje instanci klasa trećih strana. |
Implementirati | Sve klase omotača i klase nizova implementiraju usporediva sučelja. | Jedine implementirane klase Comparator-a su Collator i RuleBasedColator. |
Najbolji primjeri iz prakse pri korištenju Comparator i Comparable in Java
- Koristite usporedivo sučelje kada je usporedba standardna za određenu klasu.
- Možete koristiti lambde s komparatorom.
- Mnoge dostupne osnovne klase implementiraju usporedivo sučelje.
- Moguće je koristiti TreeSet i TreeMap tijekom sortiranja Seta ili Mape.
- The
compareTo()
metoda radi s komparatorom kao i s komparatorom. - Koristite sučelje za usporedbu samo kada < trebate više fleksibilnosti.
- The
compareTo()
metoda će vratiti pozitivan cijeli broj ako je prvi objekt veći od drugog, negativan ako je manji i nulu ako su oba ista.
Kako odabrati između usporedivog i usporednog
Konačno, moje praktično iskustvo sugerira da korištenje Comparable i Comparator u Java značajno podiže kontrolu koju imamo nad sortiranjem podataka, poboljšavajući performanse i funkcionalnost.