Сравнение элементов коллекций
Интерфейс Comparator описывает два метода сравнения:
- int compare (Object obji, object obj2) – возвращает отрицательное число, если obj1 в каком-то смысле меньше obj2; нуль, если они считаются равными; положительное число, если obj1 больше 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; } }