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 a compare() az elemek rendezésének módja Java.
  • Hasonló interfész található benne java.lang csomagban, míg a Comparator interfész benne van java.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.

Különbség az összehasonlítható és az összehasonlító között
Különbség az összehasonlítható és az összehasonlító között

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:

Különbség az összehasonlítható és az összehasonlító között Java
Különbség az összehasonlítható és az összehasonlító között Java

Ö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.