Recomandat, 2024

Alegerea Editorului

Diferența dintre comparabil și comparator în Java

Comparabil și Comparator ambele sunt interfețele generice din Java folosite pentru a compara elementele de date ale obiectelor. Interfața comparabilă este prezentă în pachetul java.lang, iar interfața Comparator este prezentă în pachetul java.util. Diferența de bază dintre interfețele comparabile și comparator este aceea că interfața comparabilă furnizează secvența de sortare unică, în timp ce interfața Comparator furnizează secvențele multiple de sortare. Există și alte diferențe între interfața Comparable și Comparator pe care o vom studia în Graficul de comparație.

Diagramă de comparație

Bazele comparațieiComparabilcomparator
De bazăInterfața comparabilă permite doar o secvență de sortare unică.Interfața Comparator permite mai multe secvențe de sortare.
pacheteInterfața comparabilă este prezentă în pachetul java.lang.Interfața Comparator este prezentă în pachetul java.util.
metodeInterfața comparabilă conține numai o singură metodă
public int comparTo (Object obj);
Interfața Comparator conține două metode
public int compare (Obiect obj1, Object obj2)
boolean equals (Object obj)
Punerea în aplicareInterfața comparabilă este implementată de clasa a cărei obiecte trebuie comparate.Comparatorul interfață este implementat de o clasă de speranță în locul clasei a cărei obiecte urmează să fie comparate.
ComparaţieMetoda compareTo (Object obj) compară obiectul utilizat pentru a invoca metoda cu obiectul specificat care trece la metodă.Obiectul compare (Object obj1, Object obj2) compară ambele obiecte specificate care sunt transmise metodei.
Listă / ArrayAtunci când o listă a obiectului de tipul Comparable trebuie comparată, clasa Collection oferă o metodă, și anume Collections.sort (List lst).Atunci când o listă de obiecte de tip comparabil trebuie comparată, clasa Collection oferă o metodă de exemplu
Collections.sort (Listă, Comparator).

Definiția Comparable

Comparabil este o interfață disponibilă în pachetul java.lang. O clasă implementează interfața Comparator, pentru a sorta obiectul în ordinea naturală. Obiectele sunt sortate în ordine naturală, ceea ce înseamnă că obiectele sunt comparate prin valorile lor ASCII. Clasele care implementează interfața comparabilă sunt clasele Byte, Character, Double, Float, Long, Short, String și Integer. Chiar și clasa Date și Calander implementează interfața comparabilă.

Interfața comparabilă conține o singură metodă care este CompareTo (Object obj). Această metodă compară obiectul utilizat pentru a invoca metoda cu obiectul specificat în parametru. Sintaxa metodei este după cum urmează:

 public int comparTo (Object obj); 

Metoda CompareTo (Object obj) returnează 0 atunci când atât obiectul comparat cu metoda conține aceeași valoare, ea întoarce valoarea -v dacă obiectul invocator este mai mic decât obiectul specificat și returnează valoarea + ve dacă obiectul invocat are mai mare valoare față de obiectul specificat. Clasa Colecții oferă o metodă de sortare pentru sortarea elementelor din listă. Elementele listă (și array) de tip Comparable pot fi sortate folosind metoda "Collections.sort (List lst)".

Definiția Comparator

Comparator este o interfață disponibilă în pachetul java.util. Interfața Comparator nu este implementată pe clasa a cărei obiecte urmează să fie comparate, iar clasa separată implementează interfața Comparator astfel încât logica de sortare să fie aplicată fiecărui element de date al obiectului dintr-o clasă diferită. Comparator conține două metode după cum urmează:

 public int compare (Object obj1, Object obj2) și boolean equals (Object obj) 

Metoda compare () de mai sus compară primul obiect obj1, cu cel de-al doilea obiect obj2. Metoda compare () returnează 0 când atât obiectul comparat cu metoda conține aceeași valoare, ea returnează valoarea -v dacă obiectul obj1 este mai mic decât obiectul obj2 și returnează valoarea + ve dacă obiectul obj1 are o valoare mai mare comparativ la obiectul obj2. Metoda equals () verifică dacă obiectul specificat este egal cu obiectul invocat. Metoda equals () este returnată adevărată dacă ambele obiecte comparate sunt egale altfel returnează false . Clasa Colecții oferă metoda de sortare a elementelor din lista și tipul de comparator. Elementele de listă ale tipurilor de comparator sunt sortate după metoda Collections.sort (List, Comparator).

Diferențe cheie între comparabil și comparator

  1. Interfața comparabilă permite o secvență de sortare unică, ceea ce înseamnă că puteți compara doar un element de date unic al obiectului în metoda comparTo (), pe de altă parte interfața Comparator permite mai multe secvențe de sortare care înseamnă că puteți compara mai multe elemente de date ale obiectului.
  2. Interfața comparabilă este implementată de clasa a cărei obiecte trebuie comparate deoarece logica de sortare este definită în interiorul aceleiași clase. Pe de altă parte, interfața Comparator nu este implementată de clasa a cărei obiecte trebuie comparate deoarece logica de sortare este definită în clasele separate în care fiecare clasă definește sortarea pe un element de date unic al obiectului și aceste clase defining implementează interfața Comparator .
  3. Interfața comparabilă se află în interiorul pachetului java.lang, în timp ce interfața Comparator se află în interiorul pachetului java.util.
  4. Interfața comparabilă declară o singură metodă care este compareTo (Object obj), în timp ce interfața Comparator declară două metode care sunt, compara (Object obj1, Object obj2) și egal (Object obj).
  5. Metoda compareTo (Object obj) din metoda Comparable compares invocarea obiectului cu obiectul specificat transmis metodei, în timp ce metoda Compare (Object obj1, Object obj2) Comparator compară obiectele obj1 cu obj2 care sunt transmise metodei.
  6. Clasa Colecții oferă o metodă de sortare "Collections.sort (List lst)" pentru a sorta obiectele de tip Comparabil. Clasa Colecții oferă metoda de sortare Collections.sort (List, Comparator) pentru a sorta obiectele de tip Comparator.

Concluzie:

Dacă doriți să sortați obiectele în ordinea naturală, puteți utiliza interfața comparabilă pe care doriți să o sortați pe baza oricărui atribut, apoi se utilizează interfața Comparator.

Top