Yleiskatsaus vertailukelpoiseen Java-esimerkkiin

Jaavaan verrattavissa on häiriö, jota käytetään verraamaan nykyisiä objekteja muihin samantyyppisiin objekteihin. Tätä vertailua voidaan käyttää lajittelemaan elementtejä kokoelmassa. Sinun on toteutettava käyttöliittymä luokkaan, jotta se voidaan lajitella tai "vertailukelpoiseksi". Sinun on otettava käyttöön vain yksi menetelmä "Vertaa". Tätä minkä tahansa tyyppistä tilaamista kutsutaan luonnolliseksi tilaamiseksi ja toteutettua „salīdzTo” -menetelmää kutsutaan luonnolliseksi vertailumenetelmäksi. Tässä tässä Vertailukelpoinen Java-esimerkki -artikkelissa tarkastellaan erilaisia ​​esimerkkejä Java-vertailukelpoisista.

ilmoitus:

Rajapinta vertailukelpoinen

Tämän käyttöliittymän toteuttamiseksi sinun on otettava käyttöön tämä menetelmä:

public int compareTo(To);

parametrit:

T - on objektityyppi, johon tätä objektia verrataan.

Palautusarvo:

CompareTo-menetelmä antaa 0, jos objekti määritetään ja tämä objekti ovat yhtä suuret, palauttaa negatiivisen kokonaisluvun, jos tämä objekti on pienempi kuin määritetty objekti, ja palauttaa positiivisen kokonaisluvun, jos tämä objekti on suurempi kuin määritetty objekti.

heittoja:

ClasscastException - Jos tähän menetelmään siirretty objekti on nolla

NullPointerException - Jos tähän menetelmään siirretty objekti ei ole yhteensopiva tämän objektin kanssa.

Luokat, jotka toteuttavat vertailukelpoisen rajapinnan, niiden luonnollinen järjestys määritetään heidän kanssaan, joten ne voidaan lajitella suoraan kokoelmiin tai ryhmiin käyttämällä kokoelmat.sort () ja Arrays.sort (). Niitä voidaan myös käyttää avaimena lajiteltuissa karttoissa ja lajiteltujen sarjojen elementeissä määrittelemättä vertailijaa erikseen.

Ymmärretään vertailukelpoinen käyttöliittymä esimerkin avulla:

Esimerkki:

package comparableDemo;
import java.util.TreeSet;
public class Student implements Comparable (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public int compareTo(Student o) (
if (this.rollNo > o.rollNo) (
return 1;
) else if (this.rollNo == o.rollNo) (
return 0;
) else (
return -1;
)
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

lähtö:

Selitys

Tämä on sovellus opiskelijoiden tietojen tallentamiseen.

  • Ensinnäkin, olemme luoneet luokan “Opiskelija”, joka edustaa kokonaisuutta Opiskelija. Tallennamme perustiedot, kuten rulla numero, nimi ja opiskelijoiden ikä.
  • Ja vaatimus on lajitella opiskelijaluettelo luettelonumeron perusteella.
  • Tämän vaatimuksen täyttämiseksi toteutetaan vertailukelpoinen käyttöliittymä, jota verrataan opiskelijaluetteloon perustuviin opiskelijoihin, koska voit nähdä “salīdzTo” -menetelmän toteutuksen.
  • Sitten meillä on päämenetelmä toiminnallisuuden näyttämiseksi. Täällä olemme luoneet ”TreeSet” ja lisänneet viisi opiskelijaa, joilla on satunnaiset roll-numerot. Olemme käyttäneet ”TreeSet” -sovellusta, koska se tallentaa elementit lajiteltuun järjestykseen.
  • Nyt, jos iteroit opiskelijaluettelon läpi, huomaat, että opiskelijat lajitellaan luettelonumeron perusteella. Se oli vaatimus!
  • Voimme myös lajitella opiskelijat muiden ominaisuuksien, kuten nimen tai iän, perusteella. Tätä varten joudumme käyttämään nimi- tai ikämuuttujia “salīdzTo” -menetelmässä “rollNo” -sovelluksen sijasta.

Esimerkki:

@Override
public int compareTo(Student o) (
if (this.age> o.age) (
return 1;
) else if (this.age == o.age) (
return 0;
) else (
return -1;
)
)
OR
@Override
public int compareTo(Student o) (
return this.name.compareTo(o.name);
)

Vertailukelpoinen vs.

Comparator on myös Comparative-kaltainen käyttöliittymä, jota käytetään kahden tyyppisen objektin vertaamiseen. Ero on siinä, että vertailijaa ei ole toteutettu itse kokonaisuusluokkaan. Meidän on toteutettava se toisessa luokassa ja toimitettava se nimenomaisesti lajittelujärjestelmään. Voimme käyttää myös nimettömän luokan ilmentymää tähän tarkoitukseen.

Oletetaan esimerkiksi, että meillä on opiskelijaluokka toteuttamatta vertailukelpoista käyttöliittymää:

package comparableDemo;
import java.util.TreeSet;
public class Student(
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
TreeSet students = new TreeSet();
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Jos yrität suorittaa tämän ohjelman, saat tämän poikkeuksen:

Koska TreeSet tarvitsee tavan lajitella elementit.

Voit ratkaista tämän virheen käyttämällä vertailuohjelmaa sellaisena kuin se on toteutettu tässä ohjelmassa:

package comparableDemo;
import java.util.Comparator;
import java.util.TreeSet;
public class Student (
private int rollNo;
private String name;
private int age;
public Student(int rollNo, String name, int age) (
this.rollNo = rollNo;
this.name = name;
this.age = age;
)
@Override
public String toString() (
return "RollNo-" + this.rollNo + ", Name-" + this.name + ", Age-" + this.age;
)
public static void main(String() args) (
Comparator studentComparator = new Comparator() (
@Override
public int compare(Student o1, Student o2) (
if (o1.rollNo < o2.rollNo) (
return -1;
) else if (o1.rollNo == o2.rollNo) (
return 0;
) else (
return 1;
)
)
);
TreeSet students = new TreeSet(studentComparator);
Student student1 = new Student(3, "Raj", 20);
Student student2 = new Student(5, "Shyam", 18);
Student student3 = new Student(1, "Ram", 19);
Student student4 = new Student(4, "Sunil", 25);
Student student5 = new Student(2, "Ajay", 26);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
students.add(student5);
for (Student student : students) (
System.out.println(student);
)
)
)

Voit nähdä, että Comparator-käyttöliittymä on toteutettu nimettömässä sisäisessä luokassa, ja ilmentymä toimitetaan TreeSetille elementtien lajittelua varten. Nyt saat oikean tuloksen kuten aiemmin.

Kokoelman käyttöliittymä Java

Kokoelma on juuriliittymä kokoelmien puitteissa. Se sisältää ilmoituksen kaikista yleiskäyttöisistä menetelmistä, jotka toteutetaan kokoelmissa, kuten Listat ja Sarjat. Karttarajapinta ei laajenna kokoelmarajapintaa, koska Kartta on avain-arvoparien kokoelma, ei vain elementtien kokoelma. Jotkut Collection-käyttöliittymämenetelmät toteutetaan abstraktissa luokassa “AbstractCollection”.

Tätä käyttöliittymää ei toteuteta suoraan, mutta sitä laajennetaan erityisillä rajapinnoilla, koska näiden menetelmien toteutus on kokoelmakohtainen. Esimerkiksi jotkut kokoelmat sallivat päällekkäisten elementtien (Ex-List), kun taas jotkut eivät (Ex-Set), toiset ylläpitävät indeksointia (Ex-List), kun taas toiset eivät (Ex-Set).

Tässä kuvataan joitain tärkeitä menetelmiä:

  1. Boolen lisäys (E e): Tämä menetelmä lisää elementin kokoelmaan ja palauttaa lisäysoperaation tilan.
  2. boolean addAll (kokoelma c): Tämä menetelmä lisää kaikki määritellyn kokoelman elementit tähän kokoelmaan ja palauttaa lisäysoperaation tilan.
  3. void clear (): Tämä menetelmä poistaa kaikki elementit tästä kokoelmasta.
  4. boolean sisältää (Object o): Tämä menetelmä tarkistaa, onko määritetty elementti kokoelmassa vai ei. Palauttaa oikean tai väärän vastaavasti.
  5. boolean sisältää (kokoelma c): Tämä menetelmä tarkistaa, ovatko kaikki määritellyn kokoelman elementit tässä kokoelmassa vai eivät, ja palauttaa sen mukaan totta tai vääriä.
  6. boolean isEmpty (): Tämä menetelmä tarkistaa, onko kokoelma tyhjä vai ei, ja palauttaa sen mukaan totta tai vääriä.
  7. Iterator iterator (): Tämä menetelmä palauttaa iteraattorin tälle kokoelmalle. Iteraattoria käytetään iteraamaan kaikkien tämän kokoelman elementtien läpi.
  8. boolen poisto (objekti o): Tämä menetelmä poistaa määritetyn elementin kokoelmasta ja palauttaa poistotoiminnon tilan.
  9. boolean removeAll (kokoelma c): Tämä menetelmä poistaa kaikki kokoelman elementit, jotka ovat määritellyssä kokoelmassa ja tässä kokoelmassa.
  10. boolean keepAll (kokoelma c): Tällä menetelmällä poistetaan kokoelmasta kaikki elementit, joita ei ole määritettyssä kokoelmassa ja joita esiintyy tässä kokoelmassa.
  11. int koko (): Tämä menetelmä palauttaa kokoelman koon.
  12. Object () toArray (): Tämä on tärkeä menetelmä, joka muodostaa ja palauttaa taulukon, joka sisältää kaikki tämän kokoelman elementit.
  13. T () array (T () a): Tämä menetelmä lisää kaikki tämän kokoelman elementit määritettyyn taulukkoon ja palauttaa taulukon. Jos taulukon koko on pienempi kuin tämän kokoelman koko, niin se luo uuden tyyppisen taulukon, joka on sama kuin määritetyn taulukon tyyppi, ja palauttaa sen. Jos määritetyn taulukon koko on enemmän kuin tämän kokoelman koko, nolla-arvo asetetaan taulukon jäljellä oleville elementeille ja palauttaa taulukon.

Johtopäätös - vertailukelpoinen Java-esimerkissä

Yhteenvetona voidaan todeta, että Vertailukelpoinen Java-käyttöliittymässä on erittäin hyödyllistä vertailla esineitä manuaalisesti, lajitella kokoelmia ja taulukkoja tai itse lajitella kokoelma. Voimme myös lajitella elementtejä kokonaisuuden eri ominaisuuksien perusteella. Sitä ei vaadita, mutta erittäin suositeltavaa, että samat tulokset saadaan yhtäläisistä ja “Vertaa” -menetelmästä, jotta vältetään sotku kokoelmassa, joka käyttää näitä molempia menetelmiä.

Suositellut artikkelit

Tämä on opas vertailukelpoiseen Java-esimerkkiin. Tässä keskustellaan Java-esimerkissä vertailukelpoisesta Johdannosta, Java-käyttöliittymässä jne. Voit myös käydä läpi muut ehdotetut artikkelimme -

  1. Lajittelu Java
  2. Paras Java IDE
  3. Sekvenssit Pythonissa
  4. Oracle-merkkijonotoiminnot
  5. Täydellinen opas lajitteluun C # -merkinnällä esimerkkeinä
  6. PL / SQL-kokoelmat | Syntaksi, tyypit, poikkeukset