Vertailukelpoinen vs Comparator sisään Java

Keskeinen ero vertailukelpoisen ja vertailevan välillä Java

  • Verrattavissa sisään Java on objekti, jonka avulla voidaan verrata itseään toiseen objektiin, kun taas Comparator on objekti eri luokkien eri objektien vertailuun.
  • Vertailukelpoinen tarjoaa compareTo() tapa lajitella elementtejä Java, kun taas Comparator tarjoaa compare() tapa lajitella elementtejä Java.
  • Siinä on vastaava käyttöliittymä java.lang paketti, kun taas Comparator-liitäntä on olemassa java.util paketti.
  • Comparable tarjoaa yhden lajittelusekvenssin, kun taas Comparator tarjoaa useita lajittelusarjoja.
  • Vertailu vaikuttaa alkuperäiseen luokkaan, kun taas Comparator ei vaikuta alkuperäiseen luokkaan.

Ero vertailtavan ja vertailevan välillä
Ero vertailtavan ja vertailevan välillä

Tässä olen analysoinut vertailun ja vertailijan välistä eroa ja arvioin kattavasti niiden edut ja haitat.

Mihin on verrattavissa Java?

vertailukelpoinen in Java on esine, joka vertaa itseään toiseen esineeseen. Se auttaa lajittelemaan mukautettujen objektien luetteloa. The Java.lang. Vertaileva käyttöliittymä tulee toteuttaa luokan toimesta, jotta sen esiintymiä voidaan verrata. Joukko objekteja, jotka toteuttavat vertailukelpoisen rajapinnan, lajitellaan automaattisesti Arrays.sort ja Collections.sort menetelmiä.

Vertailussa käytetty menetelmä

Haluan korostaa erästä tärkeää menetelmää, jota käytän usein vertailukelpoisessa käyttöliittymässä:

Vertaa():

CompareTo() -menetelmää käytetään luonnollisen lajittelun suorittamiseen merkkijonolle. Luonnollisen lajittelun merkitys on lajittelujärjestys, joka koskee objektia, esim. numeerinen järjestys kokonaislukujen lajittelussa, aakkosjärjestys merkkijonolle jne.

Syntaksi CompareTo() menetelmä on seuraava:

int compareTo(T obj)

Yllä olevassa syntaksissa T tarkoittaa vertailtavien objektien tyyppiä.

CompareTo() menetelmä vertaa objektia T-objektiin.

lähtö:

  • Se palauttaa 0:n, jos arvot ovat samat.
  • Jos objektilla on pienempi arvo, tämä menetelmä palauttaa negatiivisen arvon.
  • Jos objektilla on suurempi arvo, se palauttaa positiivisen arvon.

Esimerkki vertailukelpoisesta Java

Seuraava ohjelma Java vertailukelpoinen esimerkki näyttää kahden merkin, "a" ja "b" vertailun. Merkki "a" tulee ennen "b" aakkosjärjestyksessä.

Siksi lähtö on -1. Merkki "b" tulee "a":n jälkeen aakkosjärjestyksessä. Tästä syystä tulos on 1. Merkit "a" ja "b" ovat molemmat vastaavia. Tästä syystä lähtö on 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"));
    }
}

ulostulo

Compare To 'a' b is : -1
Compare To 'b' a is : 1
Compare To 'b' b is : 0

Mitä vertailija sisältää Java?

Vertailija in Java on objekti eri luokkien eri objektien vertailuun. Vertailun käyttöliittymä sisään Java käytetään myös järjestämään käyttäjän määrittämien luokkien objektit. Se sisältää kaksi tärkeää vertailurajapintamenetelmää, jotka tunnetaan nimellä vertaa (Object obj1, Object obj2) ja equals (Object element).

Comparatorissa käytetty menetelmä

Käytännössäni luotan usein seuraaviin kriittisiin vertailurajapinnan menetelmiin:

Vertailla():

Compare() mahdollistaa esineiden tilaamisen. Tätä varten sinun on luotava luokka, joka toteuttaa vertailurajapinnan. Tämän jälkeen sinun on ohitettava sen vertailumenetelmä.

Kohteen syntaksi compare() menetelmä on seuraava:

compare(Object obj1, Object obj2)

Yllä olevassa syntaksissa obj1 ja obj2 ovat kaksi objektia, joita sinun on verrattava vertaa()-menetelmällä. compare() menetelmällä.

lähtö:

  • Se palauttaa negatiivisen kokonaisluvun, jos ensimmäinen argumentti on pienempi kuin toinen.
  • Palauttaa nollan, jos ensimmäinen argumentti ja toinen argumentti ovat samat.
  • Tämä menetelmä voi palauttaa positiivisen kokonaisluvun, jos ensimmäinen argumentti on suurempi kuin toinen.

Sinun on varmistettava, että suhde on transitiivinen. Esimerkiksi ((vertaa(a, b)>0) && (vertaa(b, c)>0)), mikä tarkoittaa vertaa(a, c)>0.

Esimerkki vertailukelpoisesta Java

Alla Java vertailuesimerkki, niitä on 6 muuttujat. "x", "y", "p", "q", "r" ja "s". Lähtö on -1, koska arvo “x”, 20 on pienempi kuin arvo “y”, 30. Lähtö on 0, koska arvo “p”, 40 on yhtä kuin arvo “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)); 
    } 
}

lähtö:

-1
0
1

Yhtä ():

Equals() tarkistaa, onko numeroobjekti yhtä suuri kuin argumenttina välitetty objekti vai ei.

Kohteen syntaksi equals() menetelmä on seuraava:

public boolean equals(Object o)

Tämä menetelmä vaatii kaksi parametria: 1) minkä tahansa objektin ja 2) palautusarvon. Se palauttaa tosi, jos hyväksytty argumentti ei ole tyhjä ja se on samantyyppinen objekti, jolla on sama numeerinen arvo.

Equals-menetelmä esimerkki:

Alla olevassa esimerkissä vertaan neljää muuttujaa keskenään. Kolme muuttujaa ovat tyyppiä integer ja yksi on tyyppiä lyhyt. Ensimmäinen tulos on epätosi, koska p:n arvo, joka on 5, ei ole sama kuin q:n arvo, joka on 20.

Toinen tulos on tosi, koska muuttujien p ja r arvo on sama, mikä on 5. Lopuksi tulos on epätosi, koska muuttujilla p ja s on eri arvot.

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));
   }
}

ulostulo

false
true
false

Erot vertailtavan ja vertailevan välillä Java

Näen usein sekaannusta välillä Java Vertaileva ja vertailija; tässä on tärkein ero:

Ero vertailtavan ja vertailevan välillä Java
Ero vertailtavan ja vertailevan välillä Java

Vertailuperuste vertailukelpoinen Vertailuryhmässä
Menetelmä Vertailukelpoinen tarjoaa compareTo() tapa lajitella elementtejä Java. Comparator tarjoaa compare() tapa lajitella elementtejä Java.
Paketti Siinä on vastaava käyttöliittymä java.lang paketti. Siinä on vertailuliitäntä java.util paketti.
Lajittelun logiikka Lajittelulogiikan on oltava samassa luokassa kuin lajiteltava objekti. Lajittelulogiikka tulisi olla eri luokissa, jotta voidaan kirjoittaa erilaisia ​​lajitteluja objektien eri attribuuttien perusteella.
Luokan objekti Luokan, jonka objektit haluat lajitella, on toteutettava Comparable-liittymä. Luokan, jonka objektit haluat lajitella, ei tarvitse toteuttaa vertailurajapintaa.
Lajittelusekvenssit Se tarjoaa yksittäisiä lajittelusarjoja. Se tarjoaa useita lajittelusarjoja.
Lajittelujärjestys Tällä menetelmällä tiedot voidaan lajitella luonnollisen lajittelujärjestyksen mukaan. Tämä menetelmä lajittelee tiedot mukautetun lajittelujärjestyksen mukaan.
luokka Se vaikuttaa alkuperäiseen luokkaan. eli todellinen luokka muuttuu. Se ei vaikuta alkuperäiseen luokkaan, eli varsinaista luokkaa ei muuteta.
Käyttö Toteutettu usein API:ssa kalenterin, Wrapper-luokkien, päivämäärän ja
Merkkijono.
Se on toteutettu lajittelemaan kolmannen osapuolen luokkien esiintymiä.
Toteuttaa Kaikki kääreluokat ja merkkijonoluokat toteuttavat vertailukelpoisia rajapintoja. Ainoat toteutetut Comparator-luokat ovat Collator ja RuleBasedColator.

Parhaat käytännöt käytettäessä Comparator ja Comparable in Java

  • Käytä vertailukelpoista käyttöliittymää, kun vertailu on vakio tietyssä luokassa.
  • Voit käyttää lambdaa vertailijan kanssa.
  • Monet käytettävissä olevista ydinluokista toteuttavat vastaavan käyttöliittymän.
  • TreeSet ja TreeMap on mahdollista käyttää lajittelun aikana.
  • - compareTo() menetelmä toimii sekä vertailevan että vertailukelpoisen kanssa.
  • Käytä vertailuliittymää vain, kun < tarvitset enemmän joustavuutta.
  • - compareTo() menetelmä palauttaa positiivisen kokonaisluvun, jos ensimmäinen objekti on suurempi kuin toinen, negatiivisen, jos se on pienempi, ja nollan, jos molemmat ovat samat.

Kuinka valita vertailukelpoisen ja vertailijan välillä

Käytännön kokemukseni viittaa siihen, että Comparable- ja Comparator-toimintojen hyödyntäminen Java parantaa merkittävästi tietojen lajittelun hallintaa, mikä parantaa sekä suorituskykyä että toimivuutta.

Päivittäinen Guru99-uutiskirje

Aloita päiväsi uusimmilla ja tärkeimmillä tekoälyuutisilla, jotka toimitetaan juuri nyt.