Ответ 1
Когда ваш класс реализует Comparable, метод compareTo
класса определяет "естественный" порядок этого объекта. Этот метод связан с контрактом (хотя и не востребованным) в соответствии с другими методами для этого объекта, например, 0 должен всегда возвращаться для объектов, когда сравнение .equals()
возвращает true.
A Comparator - это собственное определение того, как сравнивать два объекта, и может использоваться для сравнения объектов таким образом, выровняйтесь с естественным упорядочением.
Например, строки обычно сравниваются по алфавиту. Таким образом, "a".compareTo("b")
будет использовать алфавитные сравнения. Если вы хотите сравнить строки по длине, вам нужно написать собственный компаратор.
Короче говоря, нет большой разницы. Они оба заканчиваются аналогичными средствами. В целом реализация сопоставима для естественного порядка (определение естественного порядка, очевидно, открыто для интерпретации), и написать компаратор для других задач сортировки или сравнения.