Обложка канала

Библиотека Java разработчика

9291 @BookJava

Библиотека Java разработчика. Книги по программированию на Java.

Библиотека Java разработчика

4 года назад
Открыть в
Чем отличается Comparator от Comparable? Интерфейс Comparable определяет естественный порядок среди объектов. Java Collections Framework активно использует этот порядок. По нему упорядочены элементы SortedSet/SortedMap, им упорядочиваются элементы списков и массивов в методе sort(). Порядок определяется единственным методом compareTo. Отрицательный результат означает что текущий объект «меньше» чем переданный параметром, 0 – равен, положительный – больше. Рекомендуется чтобы равные с точки зрения equals объекты всегда были равны с точки зрения compareTo. С математической точки зрения это должен быть линейный порядок. Он требует выполнения четырех свойств: 1. Антирефлексивность: x.compareTo(x) всегда 0; 2. Антисимметричность: если x.compareTo(y) > 0, то y.compareTo(x) < 0; 3. Транзитивность: если x.compareTo(y) > 0 и y.compareTo(z) > 0, то x.compareTo(z) > 0; 4. Полнота: отношение определено для любых объектов класса (кроме null). Интерфейс Comparator – это логика Comparable, вынесенная в отдельный объект. Компаратор реализует паттерн Стратегия. Большинство платформенных методов, использующих Comparable имеют перегруженный вариант с не-comparable объектом и внешним компаратором. Comparator бывает полезен, когда класс предоставлен сторонней библиотекой, и нет возможности его менять. Другой случай – особая логика упорядочивания, не свойственная классу объектов в общем, но нужная для отдельной ситуации. Кроме основного метода compare(), в компараторе есть набор утилитарных методов для комбинирования и модификации компараторов. Все они возвращают новый компаратор, позволяя сделать его иммутабельным. #Классы 👉@BookJava