Иллюстрированный самоучитель по 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; 

 } 



Содержание раздела