In limbajul Java, relatia de ordine pe o multime de obiecte apartinand
de o anumita clasa se poate introduce in doua moduri: fie clasa respectiva
trebuie sa implementeze interfata java.lang.Comparable, fie pentru
compararea obiectelor se foloseste un comparator, adica o
instanta a unei clase care implementeaza interfata java.util.Comparator.
Interfata Comparable contine metoda
public int compareTo(Object obj)
Aceasta metoda compara obiectul de care apartine cu obiectul obj,
primit ca argument, si intoarce valoarea 0 (zero) daca cele doua obiecte
sunt egale, valoare negativa daca obiectul propriu il precede pe obj
in relatia de ordine si valoare pozitiva daca ii succede. Cu alte cuvinte,
daca x si y sunt obiecte din aceeasi clasa, iar clasa
respectiva implementeaza interfata Comparable, atunci expresia x.compareTo(y)
intoarce
valoare negativa, nula sau pozitiva, dupa cum valoarea lui
x precede,
este egala cu sau succede valorii lui y. De asemenea, aceasta
metoda trebuie sa intoarca 0 atunci cand expresia x.equals(y)
intoarce true. Un exemplu tipic de clasa care implementeaza interfata
Comparable
este clasa java.lang.String.
Interfata Comparator este implementata de clasa ale carei instante
servesc drept comparatoare pentru instantele altei clase. Aceasta
interfata contine urmatoarele metode:
public int compare(Object o1,Object o2)
public boolean equals(Object obj)
Prima dintre aceste metode compara intre ele doua obiecte dintr-o clasa
diferita de cea a comparatorului. Daca c este un comparator,
iar x si y sunt doua obiecte, expresia c.compare(x,y)
intoarce valoare negativa, nula sau pozitiva daca, respectiv, valoarea
lui x precede, este egala cu sau succede valorii lui y.
A doua metoda compara insasi comparatorul cu un obiect oarecare obj primit
ca argument, astfel ca expresia c.equals(ob) intoarce true
daca comparatorul c este identic cu argumentul ob. Este
posibil ca, pentru aceeasi clasa de obiecte, sa avem mai multe clase de
comparatori, care difera intre ele prin criteriul dupa care se face comparatia.
De exemplu, doua persoane pot fi comparate dupa nume, dupa locul de munca,
dupa data nasterii etc.
Amintim ca, in limbajul Java, daca a si b sunt doua variabile-referinta,
expresia a==b are valoarea true daca, si numai daca, referintele
continute in aceste doua variabile sunt identice, cu alte cuvinte ele indica
unul si acelasi obiect din memorie. Cand dorim sa verificam daca doua obiecte
diferite (situate in memorie la adrese diferite) sunt identice, folosim
metoda
public boolean equals(Object obj)
din clasa Object, care trebuie redefinita in fiecare clasa. |