Получается, это дублирующие друг друга вещи. Может, есть какие-то реальные различия?
Comparator
и Comparable
- это оба интерфейсыComparable
, когда объект может быть как то сравнен с другим объектом.Comparator
- в отличие от этого этого это способ сравнения объектов.Пример: школьники на уроке физкультуры, физрук говорит: строиться по росту! - ученики быстренько сравнивают свои росты и строятся - кто выше вперед, кто ниже в хвост строя - это пример реализации Comparable
, где в качестве compareTo(сосед)
используется рост учеников.
Второй пример: те же школьники. Директор дает задание учителю математики сравнить учеников по успеваемости. Математичка берет журнал и сравнивает учеников по успеваемости - здесь работает compare(ученик1, ученик2)
- Comparator'ом
выступает математичка. Аналогично компаратором может выступить русичка или трудовик.
С философской точки зрения Comparator является субъектом - индивидом познающим внешний мир, сравнивая объекты.
А Comparable является объектом, т.е. на него направлена познавательная деятельность субъекта. И одновременно он сам является субъектом, который пытается познать другой объект, сравнивая его с самим собой.
Принципиальное различие в том, что в Comparable "зашит" один-единственный алгоритм сравнения объектов, в то время как Comparator представляет собой внешнюю заменяемую настройку.
Архитектурно, Comparable - это интерфейс значения, в то время как Comparator - настройка контейнера.
Следует использовать Comparable в том случае, когда задается естественный (наиболее логичный) порядок. Например, для строк это регистрозависимое лексикографическое сравнение, а для длинных чисел - сравнение по значению.
Во всех остальных случаях - без отдельного компаратора не обойтись.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Проблема в следующем: Есть автотест который должен выполнять Drag&Drop элементов в определенном порядкеDrag&Drop реализован в тесте следующим...
Есть пример кода, как можно его переделать под запись json?