Иллюстрированный самоучитель по Java
Сравнение
элементов коллекций
Интерфейс
Comparator
описывает два метода сравнения:
int compare (Object obji,
object obj2
) — возвращает отрицательное
число, если
objl
в каком-то смысле меньше
obj2
; нуль, если они считаются равными; положительное число, если
objl
больше
obj2
. Для читателей, знакомых с теорией
множеств, скажем, что этот метод сравнения обладает свойствами тождества, антисимметричности
и транзитивности;
boolean equals (Object
obj)
— сравнивает данный объект
с объектом
obj
, возвращая
true
,
если объекты совпадают в каком-либо смысле, заданном этим методом.
Для каждой коллекции можно реализовать
эти два метода, задав конкретный способ сравнения элементов, и определить объект
класса
SortedMap
вторым конструктором. Элементы коллекции
будут автоматически отсортированы в заданном порядке.
Листинг 6.6 показывает один из возможных
способов упорядочения комплексных чисел — объектов класса complex из листинга
2.4. Здесь описывается класс
ComplexCompare
, реализующий
интерфейс
Comparator
, В листинге
6.7
он применяется
для упорядоченного хранения множества комплексных чисел.
Листинг
6.6. Сравнение комплексных чисел
import
java.util.*;
class ComplexCompare
implements Comparator{
public int compare(Object
objl, Object obj2){
Complex zl =
(Complex)objl, z2 = (Complex)obj2;
double rel =
zl.getReO, iml = zl.getlm();
double re2 =
z2.getRe(), im2 = z2.getlm();
if (rel != re2)
return (int)(rel - re2);
else if (iml
!= im2) return (int)(iml — im2);
else return 0;
}
public boolean
equals(Object z) {
return compare(this,
z) == 0;
}
}