Usporedivo u primjeru Java - Kolekcijsko sučelje u Javi

Sadržaj:

Anonim

Pregled uporedivog u primjeru Java

Usporedivo u Javi je smetnja koja se koristi za usporedbu trenutnih objekata s drugim objektima iste vrste. Ova se usporedba može upotrijebiti za sortiranje elemenata u zbirci. Morat ćete implementirati sučelje u klasu da biste ga učinili razvrstanim ili "usporedivim". Morat ćete primijeniti samo jednu metodu "usporediti za". Ovako redoslijed bilo koje vrste naziva se prirodno naručivanje, a implementirana metoda "usporedite za" naziva se prirodna metoda usporedbe. Ovdje, u ovom članku Usporediv u primjeru Java, pogledat ćemo različite primjere u usporedbi sa Javom.

Deklaracija:

Sučelje usporedivo

Da biste implementirali ovo sučelje, morate implementirati ovu metodu:

public int compareTo(To);

parametri:

T - je vrsta objekta s kojim se uspoređuje ovaj objekt.

Povratna vrijednost:

metoda CompareTo vraća 0 ako je objekt naveden, a ovaj objekt jednak, vraća negativni cijeli broj ako je ovaj objekt manji od navedenog objekta i vraća pozitivni cijeli broj ako je taj objekt veći od navedenog objekta.

baca:

ClasscastException - Ako je objekt prošao ovom metodom je nula

NullPointerException - Ako objekt prosljeđen ovoj metodi nije kompatibilan s ovim objektom.

Klase koje implementiraju Uporedivo sučelje imaju svoj prirodni poredak naveden s njima, pa ih se može sortirati izravno u Collection ili Arrays pomoću Collections.sort () i Arrays.sort (). Također se mogu koristiti kao ključ u razvrstanim mapama i elementima u razvrstanim skupovima, bez zasebnog specificiranja komparatora.

Da razumemo Usporedivo sučelje uz pomoć primjera:

Primjer:

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

Izlaz:

Obrazloženje

Ovo je aplikacija za pohranu podataka o studentima.

  • Prvo smo stvorili klasu "Student" kao reprezentaciju entiteta Student. Pohranit ćemo osnovne detalje poput broja svitka, imena i starosti učenika.
  • A uvjet je sortiranje popisa učenika na osnovu broja rola.
  • Da biste ispunili ovaj zahtjev, implementira se uporedivo sučelje i uspoređuje sa studentima na temelju broja svitka, kao što možete vidjeti implementaciju metode "usporedite".
  • Tada imamo glavnu metodu za prikazivanje funkcionalnosti. Ovdje smo stvorili "TreeSet" i dodali pet učenika koji imaju nasumične brojeve role. Koristili smo "TreeSet" jer pohranjuje elemente u razvrstanom redoslijedu.
  • Ako ponovite popis učenika, vidjet ćete da su studenti razvrstani na temelju broja lista. To je bio naš zahtjev!
  • Također bismo mogli sortirati studente na temelju drugih atributa poput imena ili dobi. Da bismo to učinili, morat ćemo upotrijebiti naziv ili dobne varijable u metodi „usporediti do“, umjesto „rollNo“.

Primjer:

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

Usporedivo sa usporednikom

Comparator je također sučelje poput Comparable (Uporedivo) koje se koristi za usporedbu dva objekta tipa. Razlika je u tome što se Comparator ne implementira u samu klasu entiteta. Moramo ga implementirati u drugoj klasi i izričito pružiti primjerak mehanizma za razvrstavanje. U tu svrhu možemo koristiti i anonimnu primjeru klase.

Na primjer, pretpostavimo da imamo klasu Student bez implementacije uporedivog sučelja:

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

Ako pokušate izvršiti ovaj program, dobit ćete ovu iznimku:

Budući da TreeSet treba način sortiranja elemenata.

Da bismo riješili ovu pogrešku, možemo upotrijebiti komparator koji je implementiran u ovom 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);
)
)
)

Možete vidjeti da je Comparator sučelje implementirano u anonimnoj unutarnjoj klasi i da je primjer TreeSetu dodijeljen za sortiranje elemenata. Sada ćete dobiti pravilan ishod kao ranije.

Kolekcijsko sučelje u Javi

Zbirka je korijensko sučelje u okviru zbirki. Sadrži izjavu o svim metodama opće namjene koje su implementirane u zbirkama poput Popisa i setova. Map sučelje ne proširuje sučelje Collection jer Map je skup parova ključ-vrijednost, a ne samo zbirka elemenata. Neke od metoda sučelja zbirke implementirane su u apstraktnoj klasi „AbstractCollection“.

Ovo sučelje se ne provodi izravno, već se proširuje određenim sučeljima jer je primjena ovih metoda specifična za prikupljanje. Na primjer, neka zbirka dopušta duplikat elemenata (Ex-Lista) dok neki ne (Ex-Set), neki održavaju indeksiranje (Ex-List) dok neki ne (Ex-Set).

Ovdje su opisane neke važne metode:

  1. Boolean add (E e): Ova metoda dodaje element ovoj kolekciji i vraća status operacije dodavanja.
  2. boolean addAll (Zbirka c): Ova metoda dodaje sve elemente iz određene zbirke u ovu zbirku i vraća status operacije dodavanja.
  3. void clear (): Ova metoda uklanja sve elemente iz ove zbirke.
  4. boolean sadrži (Object o): Ova metoda provjerava je li navedeni element prisutan u kolekciji ili ne. Vraća točno ili lažno.
  5. boolean sadrži (Zbirka c): Ova metoda provjerava jesu li svi elementi iz određene zbirke prisutni u ovoj kolekciji ili ne i vraća li istinito ili lažno u skladu s tim.
  6. boolean isEmpty (): Ova metoda provjerava je li zbirka prazna ili ne, te u skladu s tim vraća true ili false.
  7. Iterator iterator (): Ova metoda vraća iterator za ovu zbirku. Iterator se koristi za ponavljanje kroz sve elemente u ovoj kolekciji.
  8. boolean uklanjanje (Objekt o): Ova metoda uklanja navedeni element iz kolekcije i vraća status operacije uklanjanja.
  9. boolean removeAll (Zbirka c): Ova metoda uklanja sve elemente iz kolekcije koji su prisutni u specificiranoj kolekciji i ovoj kolekciji.
  10. boolean retainAll (Zbirka c): Ovom metodom se uklanjaju svi elementi iz ove zbirke koji nisu navedeni u određenoj kolekciji i postoje u ovoj kolekciji.
  11. int size (): Ova metoda vraća veličinu ove zbirke.
  12. Object () toArray (): Ovo je važna metoda koja oblikuje i vraća niz koji sadrži sve elemente ove zbirke.
  13. T () toArray (T () a): Ova metoda dodaje sve elemente ove zbirke u određeni niz i vraća matricu. Ako je veličina matrice manja od veličine ove zbirke, tada stvara novi niz vrsta koji su isti kao vrsta određenog polja i vraća ga. Ako je veličina određenog niza veća od veličine ove zbirke, nulta vrijednost postavlja se za preostale elemente u polju i vraća matricu.

Zaključak - Usporedivo na primjeru Java

Ukratko, sučelje Comparable u Javi vrlo je korisno za ručnu usporedbu objekata, sortiranje kolekcija i nizova ili za samu sortiranje kolekcije. Također možemo sortirati elemente na temelju različitih atributa entiteta. Nije potrebno, ali preporučujemo da dobijete isti rezultat iz jednake vrijednosti i metoda "usporedi" da biste izbjegli nered u zbirci koja koristi obje ove metode.

Preporučeni članci

Ovo je vodič za usporedbu u primjeru Java. Ovdje smo raspravljali o Uvodu Usporedivo u primjeru Java, sučelju zbirke na Javi itd. Također možete proći kroz naše druge predložene članke da biste saznali više -

  1. Razvrstavanje u Javi
  2. Najbolji Java IDE
  3. Sekvence u Pythonu
  4. Oracle string funkcije
  5. Kompletan vodič za sortiranje u C # s primjerima
  6. Zbirke PL / SQL | Sintaksa, vrste, iznimke