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