În limbajul Java, relația de ordine pe o mulțime de obiecte
aparținând de o anumită clasă se poate introduce în două moduri: fie
clasa respectivă trebuie să implementeze interfața java.lang.Comparable,
fie pentru compararea obiectelor se foloseste un comparator,
adica o instanță a unei clase care implementează interfața java.util.Comparator.
Interfața Comparable conține metoda
public int compareTo(Object obj)
Această metodă compară obiectul de care aparține cu obiectul obj,
primit ca argument, și întoarce valoarea 0 (zero) dacă cele două
obiecte sunt egale, valoare negativă dacă obiectul propriu îl precede
pe obj în relația de ordine și valoare pozitivă dacă îi
succede. Cu alte cuvinte, dacă x și y sunt obiecte
din aceeași clasă, iar clasa respectivă implementează interfața Comparable,
atunci expresia x.compareTo(y) întoarce valoare negativă,
nulă sau pozitivă, după cum valoarea lui x precede, este egală
cu sau succede valorii lui y. De asemenea, această metodă
trebuie să întoarca 0 atunci când expresia x.equals(y)
întoarce true. Un exemplu tipic de clasă care implementează
interfața Comparable este clasa java.lang.String.
Interfața Comparator este implementată de clasa ale
cărei instanțe servesc drept comparatoare pentru instanțele
altei clase. Această interfață conține următoarele metode:
public int compare(Object o1,Object o2)
public boolean equals(Object obj)
Prima dintre aceste metode compară între ele două obiecte dintr-o clasă
diferită de cea a comparatorului. Dacă c este un comparator,
iar x si y sunt două obiecte, expresia c.compare(x,y)
întoarce valoare negativă, nulă sau pozitivă dacă, respectiv, valoarea
lui x precede, este egală cu sau succede valorii lui y.
A doua metoda compară însăsi comparatorul cu un obiect oarecare obj
primit ca argument, astfel ca expresia c.equals(obj) întoarce true
dacă comparatorul c este identic cu argumentul obj.
Este posibil ca, pentru aceeași clasă de obiecte, să avem mai multe
clase de comparatori, care diferă intre ele prin criteriul după care se
face comparația. De exemplu, două persoane pot fi comparate după nume,
după locul de muncă, după data nașterii etc.
Amintim că, în limbajul Java, dacă a și b sunt două
variabile-referință, expresia a==b are valoarea true
dacă, și numai dacă, referințele conținute în aceste două variabile sunt
identice, cu alte cuvinte ele indică unul și același obiect din
memorie. Când dorim sa verificăm dacă două obiecte distincte (situate
în memorie la adrese diferite) sunt identice, folosim metoda
public boolean equals(Object obj)
din clasa Object, care trebuie redefinită în fiecare clasă.
|