Comparabil și comparator

Două noi interfață și java.lang.Comparable java.util.Comparator au fost adăugate în versiunea 5. Utilizarea datelor Java interfeyc în aplicațiile lor vă permite să organizați de date (sortare).

În interfața Comparabil declarată doar o singură metodă compareTo (Object obj), destinate pentru comanda unei clase de obiecte. Această metodă este utilă pentru sortarea unei liste sau matrice de obiecte.

Metoda compareTo (Object obj) compară un numit obj. Spre deosebire de metoda este egal, care returnează adevărat sau fals, compareTo returnează:

  • 0, în cazul în care valorile sunt egale;
  • O valoare negativă (de obicei 1), în cazul în care apelatul mai puțin obj;
  • O valoare pozitivă (de obicei +1), în cazul în care obiectul este numit mai obj.

În cazul în care tipul de obiect nu este compatibil cu comparație, compareTo (Object obj) poate provoca o excepție ClassCastException. Trebuie amintit că argumentul metoda compareTo are un tip comparabil de obiect de clasă.

orele de curs Byte, scurt, Integer, pe termen lung, dublu, float, Caracter, Șir de punere în aplicare deja interfața comparabili.

Un exemplu de implementare a interfeței Comparabil

Rezultatul programului:

În primul exemplu, valorile sunt sortate după str câmp (alfabetic), apoi, în metoda conform num compareTo. Acest lucru se vede clar în două rânduri cu valori egale și diferite num str. Pentru a schimba ordinea de sortare a valorii str (în ordine inversă), este necesar să se facă mici modificări în metoda compareTo.

Interfața Comparator a declarat metoda de comparare (Object obj1, obiect obj2), care permite comparația între un două obiecte. La metoda de ieșire returnează valoarea 0 dacă obiectele sunt valoare egală, pozitivă sau o valoare negativă în cazul în care obiectele sunt identice.

Metoda poate provoca ClassCastException excepție. în cazul în care tipurile de obiecte care nu sunt compatibile cu comparația. Un exemplu simplu al interfeței Comparator:

Rezultatul programului:

Complica exemplu, și să vândă mai multe tipuri de sortare. Pentru a face acest lucru, creați o clasă de produse cu câmpurile de nume, prețul și cantitatea.

Să creeze două clase (SortedByName, SortedByPrice), implementarea interfetei Comparator pentru a sorta obiectele după nume și pentru prețul:

EXEMPLU utilizați Arrays.sort:

Rezultatul programului:

Pentru a sorta obiectele, două comparatoare independente au fost puse în aplicare de nume și un preț (SortedByName și SortedByPrice). Sortarea este realizată folosind clasa Arrays. care are o metodă de sortare. Această metodă are ca argument al doilea tip comparatorul său.

Puteți utiliza, de asemenea, metoda de sortare colecțiilor de clasă. în care o primă intrare primește lista de argumente de obiecte:

Interfața Comparabil este utilizată doar pentru comparație obiect de clasă în care este pus în aplicare interfața. Ie interfață logică comparație Comparabil determină un tip de referință obiect specific în implementarea dvs. (în conformitate cu regulile dezvoltator).

Comparator este o implementare separată și poate fi utilizat în mod repetat și cu diferite clase. Ie Interfață Comparator permite crearea de obiecte care vor controla procesul de comparare (cum ar fi sortarea).