Pregled Primerljivega v primeru Java

Primerljivo v Javi je interferenca, ki se uporablja za primerjavo trenutnih predmetov z drugimi predmeti iste vrste. Ta primerjava se lahko uporablja za razvrščanje elementov v zbirki. Vmesnik boste morali implementirati v razred, če želite narediti razvrščen ali "primerljiv". Izvajati boste morali le eno metodo »primerjaj«. To urejanje katere koli vrste imenujemo naravno urejanje, izvedena metoda "primerjaj" pa se imenuje naravna metoda primerjave. Tukaj v tem primerljivem članku Primer jave bomo pogledali različne primere primerljivih v javi.

Izjava:

Vmesnik primerljiv

Za izvajanje tega vmesnika morate implementirati to metodo:

public int compareTo(To);

Parametri:

T - je vrsta predmeta, s katerim se primerja ta objekt.

Povratna vrednost:

metoda сравнениеTo vrne 0, če je predmet določen in je ta objekt enak, vrne negativno celo število, če je ta objekt manjši od podanega predmeta, in vrne pozitivno celo število, če je ta objekt večji od podanega predmeta.

Vrzi:

ClasscastException - Če je predmet, ki je bil posredovan tej metodi, ničen

NullPointerException - Če predmet, posredovan tej metodi, ni združljiv s tem objektom.

Razredi, ki izvajajo primerljiv vmesnik, imajo z njimi določen naravni vrstni red, zato jih je mogoče razvrstiti neposredno v zbirko ali array s pomočjo Collections.sort () in Arrays.sort (). Prav tako jih je mogoče uporabiti kot ključ pri razvrščenih zemljevidih ​​in elementih v razvrščenih naborih, ne da bi posebej navedli primerjalnik.

Poglejmo si primerljivi vmesnik s pomočjo primera:

Primer:

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

Izhod:

Pojasnilo

To je aplikacija za shranjevanje podrobnosti študentov.

  • Najprej smo ustvarili razred "Študent" kot predstavitev entitete Študent. Shranili bomo osnovne podrobnosti, kot so številka zvitka, ime in starost študentov.
  • In zahteva je, da se seznam študentov razvrsti glede na številko zvitka.
  • Za izpolnitev te zahteve se izvede primerljiv vmesnik in primerja s študenti na podlagi številke v zvitku, saj lahko vidite izvajanje metode "primerjaj".
  • Nato imamo glavno metodo za prikaz funkcionalnosti. Tu smo ustvarili "TreeSet" in dodali pet učencev, ki imajo naključne številke zvitkov. Uporabili smo "TreeSet", ker shranjuje elemente v razvrščenem vrstnem redu.
  • Zdaj, če ponovite seznam študentov, boste ugotovili, da so študenti razvrščeni glede na številko zvitka. To je bila naša zahteva!
  • Študente bi lahko razvrstili tudi na podlagi drugih lastnosti, kot so ime ali starost. Da bi to naredili, bomo morali uporabiti ime ali starostne spremenljivke v metodi »primerjaj«, namesto »rollNo«.

Primer:

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

Primerljivo vs primerjalno

Primerjalnik je tudi vmesnik, kot je Primerljiv, ki se uporablja za primerjavo dveh predmetnih vrst. Razlika je v tem, da se primerjalnik ne izvaja v razredu entitet. Izvesti ga moramo v drugem razredu in izrecno predložiti primerek mehanizmu za razvrščanje. V ta namen lahko uporabimo tudi anonimni primerek razreda.

Recimo, da imamo razred Student brez uporabe primerljivega vmesnika:

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

Če poskusite izvesti ta program, boste dobili to izjemo:

Ker TreeSet potrebuje način razvrščanja elementov.

Za rešitev te napake lahko uporabimo primerjalnik, kot je implementiran v tem programu:

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

Lahko vidite, da je primerjalni vmesnik izveden v anonimnem notranjem razredu in da je primer TreeSet za razvrščanje elementov. Zdaj boste dobili ustrezne rezultate kot prej.

Zbirni vmesnik na Javi

Zbirka je korenski vmesnik v okviru zbirk. Vsebuje izjavo o vseh splošnih metodah, ki se izvajajo v zbirkah, kot so Seznami in kompleti. Map vmesnik ne razširja vmesnika Collection, ker je Map zbirka parov ključ-vrednost in ne le zbirka elementov. Nekatere metode vmesnika Collection so izvedene v abstraktnem razredu »AbstractCollection«.

Ta vmesnik se ne izvaja neposredno, ampak ga razširja poseben vmesnik, ker je izvajanje teh metod specifično za zbiranje. Na primer, neka zbirka omogoča podvojene elemente (Ex-Seznam), medtem ko nekateri ne (Ex-Set), nekateri ohranjajo indeksiranje (Ex-List), nekateri pa ne (Ex-Set).

Tu je opisanih nekaj pomembnih metod:

  1. Boolean add (E e): Ta metoda doda element tej zbirki in vrne status operacije dodajanja.
  2. boolean addAll (Zbirka c): Ta metoda doda vse elemente iz določene zbirke v to zbirko in vrne stanje operacije dodajanja.
  3. void clear (): Ta metoda odstrani vse elemente iz te zbirke.
  4. boolean vsebuje (Objekt o): Ta metoda preveri, ali je v zbirki naveden element prisoten ali ne. Vrne ustrezno ali napačno.
  5. boolean vsebuje (Zbirka c): Ta metoda preveri, ali so v tej zbirki vsi elementi iz določene zbirke ali ne, in ustrezno vrne resnično ali napačno.
  6. boolean isEmpty (): Ta metoda preveri, ali je zbirka prazna ali ne, in ustrezno vrne true ali false.
  7. Iterator iterator (): Ta metoda vrne iterator za to zbirko. Iterator se uporablja za ponavljanje skozi vse elemente v tej zbirki.
  8. boolean remove (Objekt o): Ta metoda odstrani podani element iz zbirke in vrne status operacije odstranitve.
  9. boolean removeAll (Zbirka c): Ta metoda odstrani vse elemente iz te zbirke, ki so prisotni v določeni zbirki in tej zbirki.
  10. boolean retainAll (Zbirka c): Ta metoda odstrani vse elemente iz te zbirke, ki niso v določeni zbirki in so v tej zbirki.
  11. int size (): Ta metoda vrne velikost te zbirke.
  12. Object () toArray (): To je pomembna metoda, ki oblikuje in vrne matriko, ki vsebuje vse elemente te zbirke.
  13. T () toArray (T () a): Ta metoda doda vse elemente te zbirke v določen niz in vrne matriko. Če je velikost matrike manjša od velikosti te zbirke, potem ustvari novo matriko vrst, ki je enaka vrsti določene matrike in jo vrne. Če je velikost podanega niza večja od velikosti te zbirke, je ničelna vrednost nastavljena za preostale elemente v matriki in vrne matriko.

Zaključek - Primerljivo v primeru Java

Če povzamem, je vmesnik Primerljiv v Javi zelo uporaben za ročno primerjavo predmetov, urejanje zbirk in nizov ali za sam razvrščanje zbirke. Elemente lahko razvrstimo tudi na podlagi različnih lastnosti entitete. Ni potrebno, vendar je zelo priporočljivo, da dobite enak rezultat iz enake in metoda "primerjaj", da se izognete neredu v zbirki, ki uporablja obe metodi.

Priporočeni članki

To je vodnik za Primerljivo v primeru Java. Tukaj razpravljamo o Uvodu primerljivem v primeru Java, vmesniku za zbiranje na Javi itd. Če želite izvedeti več, lahko preberete tudi druge naše predlagane članke -

  1. Razvrščanje v Javi
  2. Najboljši Java IDE
  3. Zaporedja v Pythonu
  4. Funkcije nizov Oracle
  5. Celoten vodnik za razvrščanje v C # s primeri
  6. Zbirke PL / SQL | Sintaksa, vrste, izjeme