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 tarjoaacompare()
tapa lajitella elementtejä Java. - Siinä on vastaava käyttöliittymä
java.lang
paketti, kun taas Comparator-liitäntä on olemassajava.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.

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