Page 184 - 6253
P. 184
7.3. Використання компараторів для сортування елементів колекції
Класи TreeSet і TreeМар забезпечують представлення елементів колекції та
карти у відсортованому порядку. При цьому мається на увазі, що елементи
відсортовані у порядку їх зростання і сортування відбувається по першому полю (у
випадку колекції) або ключу (у випадку карти). Для визначення власного порядку
сортування використовуються компаратори, що реалізуються за допомого
інтерфейсу Comparator.
Інтерфейс Comparator – це узагальнений інтерфейс, який оголошується
наступним чином:
interface Comparator <T>
Параметр Т вказує на тип об'єктів, які порівнюються між собою.
У інтерфейсі Comparator визначено два методи з наступними сигнатурами:
int compare(Т об’єкт1, Т об’єкт2)
boolean equals(object об’єкт)
Метод compare() призначений для порівняння двох елементів колекції або
карти у визначеному порядку. Метод повертає значення нуль, якщо об'єкти
еквівалентні, додатне значення, якщо об’єкт1 більший за об’єкт2 та від’ємне
значення, якщо об’єкт1 менший за об’єкт2. Також методом генерується виняток
ClassCastException у випадку, якщо типи порівнюваних об’єктів не сумісні між
собою.
Метод equals() призначений для перевірки на еквівалентність двох об’єктів. Він
повертає значення true, якщо об’єкти є еквівалентними між собою та значення false
у протилежному випадку.
Нижче представлено приклад, який демонструє потужність налаштовуваних
компараторів. Він реалізує метод compare() для вибору поля по якому має
відбуватися сортування елементів колекції.
import java.util.Comparator;
import java.util.TreeSet;
class Car implements Comparable<Car> {
183