Java: сравнение с компаратором

Возможные дубликаты:
разница между compare() и compareTo()
Java: В чем разница между реализацией Comparable и Comparator?

В чем отличия клавиш между Comparable и Comparator.

и который предпочтительнее других в каких сценариях?

Спасибо

Обновлено - ХОРОШАЯ СВЯЗЬ С ПРИМЕРОМ!!

http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html

Ответ 1

Когда ваш класс реализует Comparable, метод compareTo класса определяет "естественный" порядок этого объекта. Этот метод связан с контрактом (хотя и не востребованным) в соответствии с другими методами для этого объекта, например, 0 должен всегда возвращаться для объектов, когда сравнение .equals() возвращает true.

A Comparator - это собственное определение того, как сравнивать два объекта, и может использоваться для сравнения объектов таким образом, выровняйтесь с естественным упорядочением.

Например, строки обычно сравниваются по алфавиту. Таким образом, "a".compareTo("b") будет использовать алфавитные сравнения. Если вы хотите сравнить строки по длине, вам нужно написать собственный компаратор.

Короче говоря, нет большой разницы. Они оба заканчиваются аналогичными средствами. В целом реализация сопоставима для естественного порядка (определение естественного порядка, очевидно, открыто для интерпретации), и написать компаратор для других задач сортировки или сравнения.

Ответ 2

Comparator предоставляет вам возможность предоставить пользовательскую логику сравнения для типов, которые вы не контролируете.

Comparable позволяет указать, как сравниваются объекты, которые вы реализуете.

Очевидно, что если у вас нет контроля над классом (или вы хотите предоставить несколько способов сравнения объектов, которые у вас есть), используйте Comparator.

В противном случае вы можете использовать Comparable.