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:
- Boolean add (E e): Ova metoda dodaje element ovoj kolekciji i vraća status operacije dodavanja.
- boolean addAll (Zbirka c): Ova metoda dodaje sve elemente iz određene zbirke u ovu zbirku i vraća status operacije dodavanja.
- void clear (): Ova metoda uklanja sve elemente iz ove zbirke.
- boolean sadrži (Object o): Ova metoda provjerava je li navedeni element prisutan u kolekciji ili ne. Vraća točno ili lažno.
- 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.
- boolean isEmpty (): Ova metoda provjerava je li zbirka prazna ili ne, te u skladu s tim vraća true ili false.
- Iterator iterator (): Ova metoda vraća iterator za ovu zbirku. Iterator se koristi za ponavljanje kroz sve elemente u ovoj kolekciji.
- boolean uklanjanje (Objekt o): Ova metoda uklanja navedeni element iz kolekcije i vraća status operacije uklanjanja.
- boolean removeAll (Zbirka c): Ova metoda uklanja sve elemente iz kolekcije koji su prisutni u specificiranoj kolekciji i ovoj kolekciji.
- 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.
- int size (): Ova metoda vraća veličinu ove zbirke.
- Object () toArray (): Ovo je važna metoda koja oblikuje i vraća niz koji sadrži sve elemente ove zbirke.
- 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 -
- Razvrstavanje u Javi
- Najbolji Java IDE
- Sekvence u Pythonu
- Oracle string funkcije
- Kompletan vodič za sortiranje u C # s primjerima
- Zbirke PL / SQL | Sintaksa, vrste, iznimke