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
,