Comparable vs Comparator in Java
Főbb különbség az összehasonlítható és az összehasonlító között Java
- Összehasonlítható Java egy objektum, amellyel összehasonlíthatja magát egy másik objektummal, míg a Comparator egy olyan objektum, amely különböző osztályokba tartozó objektumokat hasonlít össze.
- Összehasonlítható biztosítja a
compareTo()
az elemek rendezésének módja Java, míg a Comparator acompare()
az elemek rendezésének módja Java. - Hasonló interfész található benne
java.lang
csomagban, míg a Comparator interfész benne vanjava.util
csomag. - A Comparable egyetlen rendezési sorozatot, míg a Comparator több rendezési sorozatot biztosít.
- A Comparator hatással van az eredeti osztályra, míg a Comparator nem az eredeti osztályra.

Itt elemeztem az összehasonlítható és a Comparator közötti különbséget, és átfogóan értékelem azok előnyeit és hátrányait.
Amiben összehasonlítható Java?
Hasonló in Java olyan tárgy, amely összehasonlítja magát egy másik tárggyal. Segít az egyéni objektumok listájának rendezésében. A Java.lang.Az összehasonlítható felületet egy osztálynak kell megvalósítania, hogy összehasonlíthassa példányait. Az összehasonlítható interfészt megvalósító objektumok tömbje automatikusan sorba rendeződik Arrays.sort
és a Collections.sort
mód.
Az Összehasonlításban használt módszer
Szeretnék kiemelni egy fontos módszert, amelyet gyakran használok a Comparable felületen:
Összehasonlítani():
A CompareTo() metódus természetes rendezést hajt végre egy karakterláncon. A természetes rendezés jelentése az objektumra érvényes rendezési sorrend, pl. az egész számok rendezésének numerikus sorrendje, a String betűrendje stb.
A szintaxisa CompareTo()
a módszer a következő:
int compareTo(T obj)
A fenti szintaxisban a T az összehasonlítandó objektumok típusát jelöli.
CompareTo()
módszer összehasonlítja az objektumot T obj-val.
output:
- 0-t ad vissza, ha az értékek egyenlőek.
- Ha az objektum értéke alacsonyabb, akkor ez a metódus negatív értéket ad vissza.
- Ha az objektumnak nagyobb az értéke, akkor pozitív értéket ad vissza.
Példa összehasonlításra in Java
A következő program a Java egy összehasonlítható példa két karakter, „a” és „b” összehasonlítását mutatja be. Az „a” karakter ábécé sorrendben „b” elé kerül.
Ezért a kimenet -1. A „b” karakter az „a” után következik ábécé sorrendben. Ezért a kimenet 1. Az „a” és „b” karakterek egyenértékűek. Ezért a kimenet 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")); } }
teljesítmény
Compare To 'a' b is : -1 Compare To 'b' a is : 1 Compare To 'b' b is : 0
Miben van összehasonlító Java?
Összehasonlító in Java egy objektum a különböző osztályokhoz tartozó objektumok összehasonlítására. Az összehasonlító interfész be Java a felhasználó által definiált osztályok objektumainak rendezésére is szolgál. Két fontos összehasonlító interfész módszert tartalmaz, amelyek az összehasonlítás (Object obj1, Object obj2) és az egyenlők (Object element) néven ismertek.
A Comparatorban használt módszer
Gyakorlatomban gyakran támaszkodom az összehasonlító felület alábbi kritikus módszereire:
Összehasonlítás():
Compare()
lehetővé teszi az objektumok megrendelését. Ehhez létre kell hozni egy osztályt, amely egy összehasonlító felületet valósít meg. Ezt követően felül kell írnia az összehasonlítási módszert.
A szintaxis a compare()
a módszer a következő:
compare(Object obj1, Object obj2)
A fenti szintaxisban az obj1 és az obj2 két olyan objektum, amelyeket össze kell hasonlítani az összehasonlítás() metódussal. compare()
módszer.
output:
- Negatív egész számot ad vissza, ha az első argumentum kisebb, mint a második.
- Nullát ad vissza, ha az első argumentum és a második argumentum egyenlő.
- Ez a módszer pozitív egész számot adhat vissza, ha az első argumentum nagyobb, mint a második.
Biztosítania kell, hogy a kapcsolat tranzitív legyen. Például ((hasonlítsa össze(a, b)>0) && (hasonlítsa össze(b, c)>0)), ami azt jelenti, hogy összehasonlítsa(a, c)>0.
Példa összehasonlításra in Java
Az alábbiakban Java összehasonlító példa, 6 van változók. „x”, „y”, „p”, „q”, „r” és „s”. A kimenet -1, mint az „x” értéke, a 20 kisebb, mint az „y”, 30. A kimenet 0, mert a „p” értéke, 40 egyenlő „q” értékével, 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
Egyenlő():
Equals()
ellenőrzi, hogy a számobjektum egyenlő-e az argumentumként átadott objektummal vagy sem.
A szintaxis a equals()
a módszer a következő:
public boolean equals(Object o)
Ez a metódus két paramétert igényel: 1) bármely objektumot és 2) egy visszatérési értéket. Igazat ad vissza, ha az átadott argumentum nem null, és egy hasonló típusú objektum, amely azonos numerikus értékkel rendelkezik.
Példa az egyenlő módszerre:
Az alábbi példában a négy változót fogom összehasonlítani egymással. Három változó integer típusú, egy pedig rövid típusú. Az első eredmény hamis, mivel p értéke, amely 5, nem egyenlő q értékével, amely 20.
A második eredmény igaz, mert a p és r változó értéke megegyezik, ami 5. Végül a kimenet hamis, mivel a p és az s változók eltérő értékkel rendelkeznek.
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)); } }
teljesítmény
false true false
Az összehasonlítható és az összehasonlító közötti különbségek Java
Gyakran látom a zavart a kettő között Java Összehasonlítható és összehasonlító; itt van a fő különbség:
Összehasonlítási alap | Hasonló | Összehasonlító |
---|---|---|
Módszer | Összehasonlítható nyújt compareTo() az elemek rendezésének módja Java. |
A Comparator biztosítja compare() az elemek rendezésének módja Java. |
Csomag | Hasonló interfész található benne java.lang csomag. |
Összehasonlító interfész található benne java.util csomag. |
A rendezés logikája | A rendezés logikájának ugyanabban az osztályban kell lennie, mint a rendezni kívánt objektumnak. | A rendezés logikájának külön osztályokban kell lennie, hogy különböző rendezéseket írhasson az objektumok különböző attribútumai alapján. |
Osztály objektum | Annak az osztálynak, amelynek objektumait rendezni szeretné, meg kell valósítania az Összehasonlítható felületet. | Egy osztálynak, amelynek objektumait rendezni szeretné, nem kell összehasonlító felületet megvalósítania. |
Sorozatok rendezése | Egyetlen rendezési szekvenciát biztosít. | Több rendezési szekvenciát biztosít. |
Rendezési sorrend | Ezzel a módszerrel a természetes rendezési sorrend szerint rendezhetők az adatok. | Ez a módszer a testreszabott rendezési sorrend szerint rendezi az adatokat. |
Osztály | Az eredeti osztályt érinti. azaz a tényleges osztály megváltozik. | Nincs hatással az eredeti osztályra, azaz a tényleges osztály nem módosul. |
Használat | Gyakran implementálva az API-ban a Naptár, a Wrapper osztályok, a dátum és a Húr. |
A harmadik féltől származó osztályok példányainak rendezésére van megvalósítva. |
végrehajtja | Minden burkoló osztály és karakterlánc osztály hasonló interfészt valósít meg. | A Comparator egyetlen megvalósított osztálya a Collator és a RuleBasedColator. |
Bevált gyakorlatok a Comparator és Comparable in használatához Java
- Használjon összehasonlítható interfészt, ha az összehasonlítás szabványos az adott osztályhoz.
- Használhat lambdákat komparátorral.
- A rendelkezésre álló alapvető osztályok közül sok hasonló interfészt valósít meg.
- Lehetőség van a TreeSet és a TreeMap használatára a halmaz vagy a térkép rendezése közben.
- A
compareTo()
módszer komparátorral és összehasonlíthatóval is működik. - Csak akkor használja az összehasonlító felületet, ha < nagyobb rugalmasságra van szüksége.
- A
compareTo()
metódus pozitív egész számot ad vissza, ha az első objektum nagyobb, mint a másik, negatívat, ha alacsonyabb, és nullát, ha mindkettő azonos.
Hogyan válasszunk összehasonlítható és összehasonlító elem között
Gyakorlati tapasztalataim végérvényesen azt sugallják, hogy a Comparable és a Comparator kiaknázását Java jelentősen megnöveli az adatrendezés feletti kontrollt, javítva a teljesítményt és a funkcionalitást egyaránt.