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

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

В чем основные различия между Comparable и Comparator.

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

Спасибо

Обновлено - хорошая ссылка с примером!

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

2 ответа

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам