Prezentare generală a Comparabilului în Exemplu Java

Comparabil în Java este o interferență folosită pentru a compara obiectele curente cu alte obiecte de același tip. Această comparație poate fi utilizată pentru a sorta elemente dintr-o colecție. Va trebui să implementați interfața într-o clasă pentru a o face să fie sortabilă sau „comparabilă”. Va trebui să implementați o singură metodă „compareTo”. Această ordonare de orice tip se numește ordonare naturală, iar metoda „compareTo” implementată se numește metodă de comparare naturală. Aici în acest articol Comparabil în Java Exemplu vom analiza diferitele exemple de comparabil în Java.

Declaraţie:

Interfață comparabilă

Pentru a implementa această interfață, trebuie să implementați această metodă:

public int compareTo(To);

parametri:

T - este tipul de obiect cu care este comparat acest obiect.

Valoare returnată:

compareTo metodă returnează 0 dacă obiectul este specificat și acest obiect este egal, returnează un număr întreg negativ dacă acest obiect este mai mic decât obiectul specificat și returnează un număr întreg pozitiv dacă acest obiect este mai mare decât obiectul specificat.

aruncări:

ClasscastException - Dacă obiectul trecut la această metodă este nul

NullPointerException - Dacă obiectul trecut la această metodă nu este compatibil cu acest obiect.

Clasele care implementează o interfață comparabilă, au ordonarea lor naturală specificată cu ele și astfel pot fi sortate direct în Collection sau Arrays folosind Collections.sort () și Arrays.sort (). De asemenea, ele pot fi utilizate ca cheie în hărți sortate și elemente în seturi sortate, fără a specifica separat Comparator.

Să înțelegem interfața comparabilă cu ajutorul unui exemplu:

Exemplu:

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

ieşire:

Explicaţie

Aceasta este o aplicație pentru stocarea detaliilor studentului.

  • În primul rând, am creat o clasă „Student” ca reprezentare a entității Student. Vom stoca detalii de bază, cum ar fi numărul rolului, numele și vârsta studenților.
  • Și cerința este să sortăm lista studenților în funcție de numărul de listă.
  • Pentru a îndeplini această cerință, o interfață comparabilă este pusă în aplicare și comparată cu studenții care se bazează pe numărul de listă, deoarece puteți vedea implementarea metodei „comparaTo”.
  • Apoi avem metoda principală pentru a arăta funcționalitatea. Aici am creat un „TreeSet” și am adăugat cinci studenți având numere aleatorii ale rolului. Am folosit „TreeSet” pentru că stochează elemente în ordine ordonată.
  • Acum, dacă veți expira lista studenților, veți vedea că elevii sunt sortați în funcție de numărul de listă. Asta a fost cerința noastră!
  • De asemenea, am putea sorta elevii în funcție de alte atribute, cum ar fi numele sau vârsta. Pentru a face acest lucru, va trebui să folosim variabile de nume sau de vârstă în metoda „compareTo” în loc de „rollNo”.

Exemplu:

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

Comparabil vs Comparator

Comparator este, de asemenea, o interfață precum Comparable, care este utilizată pentru compararea a două obiecte de tip. Diferența este că Comparator nu este implementat în clasa de entitate însăși. Trebuie să o implementăm într-o altă clasă și să oferim instanței mecanismului de sortare în mod explicit. De asemenea, putem folosi o instanță de clasă anonimă în acest scop.

De exemplu, să presupunem că avem o clasă Student fără a implementa o interfață comparabilă:

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

Dacă încercați să executați acest program, veți primi această excepție:

Deoarece TreeSet are nevoie de o modalitate de a sorta elementele.

Pentru a rezolva această eroare, putem utiliza Comparator așa cum este implementat în acest program:

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

Puteți vedea că interfața Comparator este implementată într-o clasă interioară anonimă și instanța este furnizată TreeSet pentru sortarea elementelor. Acum veți obține o ieșire corespunzătoare ca mai devreme.

Interfață de colectare în Java

Colecția este interfața rădăcină din cadrul colecțiilor. Conține declarația tuturor metodelor de uz general care sunt implementate în colecții precum Liste și seturi. Interfața Map nu extinde interfața Colecție, deoarece Map este o colecție de perechi cheie-valoare și nu doar o colecție de elemente. Unele dintre metodele de interfață de colecție sunt implementate într-o clasă abstractă „AbstractCollection”.

Această interfață nu este implementată direct, ci extinsă de interfețe specifice, deoarece implementarea acestor metode este specifică colectării. De exemplu, unele colecții permit duplicarea elementelor (Ex-List), în timp ce altele nu (Ex-Set), altele mențin indexarea (Ex-List), în timp ce altele nu (Ex-Set).

Câteva metode importante sunt descrise aici:

  1. Adăugare booleană (E e): Această metodă adaugă un element la această colecție și returnează starea operației de adăugare.
  2. boolean addAll (Colecția c): Această metodă adaugă toate elementele din colecția specificată în această colecție și returnează starea operației de adăugare.
  3. void clear (): Această metodă elimină toate elementele din această colecție.
  4. boolean conține (Obiectul o): Această metodă verifică dacă elementul specificat este prezent în colecție sau nu. Returnează adevărat sau fals în consecință.
  5. boolean conține (Colecția c): Această metodă verifică dacă toate elementele din colecția specificată sunt prezente sau nu în această colecție și returnează adevărat sau fals în consecință.
  6. boolean isEmpty (): Această metodă verifică dacă colecția este goală sau nu și returnează adevărat sau fals în consecință.
  7. Iterator iterator (): Această metodă returnează iteratorul pentru această colecție. Iteratorul este folosit pentru a itera prin toate elementele din această colecție.
  8. boolean remove (Obiect o): Această metodă elimină elementul specificat din colecție și returnează starea operației de eliminare.
  9. boolean removeAll (Collection c): Această metodă elimină toate elementele din această colecție care sunt prezente în colecția specificată și în această colecție.
  10. boolean retainAll (Collection c): Această metodă elimină toate elementele din această colecție care nu sunt prezente în colecția specificată și sunt prezente în această colecție.
  11. int size (): Această metodă returnează dimensiunea acestei colecții.
  12. Obiect () toArray (): Aceasta este o metodă importantă care formează și returnează tabloul conținând toate elementele acestei colecții.
  13. T () toArray (T () a): Această metodă adaugă toate elementele acestei colecții într-un tablou specificat și returnează tabloul. Dacă dimensiunea tabloului este mai mică decât dimensiunea acestei colecții, atunci creează un nou tablou de tipuri la fel ca tipul tabloului specificat și îl returnează. Dacă dimensiunea tabloului specificat este mai mare decât dimensiunea acestei colecții, valoarea nulă este setată pentru elementele rămase din tablă și returnează tabloul.

Concluzie - Comparabil în Exemplu Java

Pentru a rezuma, Comparabilul în interfața Java este foarte util pentru compararea obiectelor manual, sortarea colecțiilor și tablourilor sau pentru a fi sortată colecția în sine. De asemenea, putem sorta elemente bazate pe diferite atribute ale entității. Nu este necesar, dar foarte recomandat să aveți același rezultat din egalitate și metoda „comparaTo” pentru a evita încurcarea într-o colecție care folosește ambele metode.

Articole recomandate

Acesta este un ghid pentru Comparabil în Exemplul Java. Aici vom discuta despre introducerea comparabilă în exemplul Java, interfața de colectare în Java, etc. Puteți parcurge și alte articole sugerate pentru a afla mai multe -

  1. Sortare în Java
  2. Cel mai bun IDE Java
  3. Secvențe în Python
  4. Oracle String Functions
  5. Ghid complet de sortare în C # cu exemple
  6. Colecții PL / SQL | Sintaxa, tipuri, excepții