2014-01-10 7 views

ответ

1

От Comparable:

Естественное упорядочение для класса C называется в соответствии с равными тогда и только тогда e1.compareTo(e2) == 0 имеет то же логическое значение, как e1.equals(e2) для каждого e1 и e2 класса C. Обратите внимание: null не является экземпляром какого-либо класса, и e.compareTo(null) должен выбросить NullPointerException, хотя e.equals(null) возвращает false.

Настоятельно рекомендуется (хотя и не обязательно), чтобы естественные порядки соответствовали. Это связано с тем, что сортированные наборы (и отсортированные карты) без явных компараторов ведут себя «странно», когда они используются с элементами (или ключами), естественное упорядочение которых несовместимо с равными. В частности, такой сортированный набор (или отсортированная карта) нарушает общий контракт для множества (или карты), который определяется в терминах метода equals.

(курсив мой)

Так что вам не нужно переопределить equals() (т.е. он не будет вызывать проблемы в стандартных методов сортировки, так как они используют только compareTo(), а также не нарушают договор Comparable), но это, конечно, не повредит.

+0

, когда у меня есть несколько способов сортировки коллекции объектов, используя разные компараторы .. в таком сценарии e1.compareTo (e2) == 0 не будет таким же, как e1.equals (e2). .. В этом случае, если я использую объекты класса в качестве ключей к коллекции, это вызовет любую проблему? –

+0

@paulb Какую коллекцию вы используете? – arshajii

+0

Я использую ArraList .. –

2

Из Javadoc для Comparator

Это, как правило, имеет место, но не строго необходимо, чтобы (ср (х, у) == 0) == (x.equals (у)). Вообще говоря, любой компаратор, нарушающий это условие, должен четко указывать этот факт. Рекомендуемый язык: «Примечание: этот компаратор налагает упорядочения, которые не соответствуют равным».

Это означает, что обычно вам не нужно переопределять equals(). Вероятно, вы не должны этого делать, если не хотите, чтобы ваш Comparator возвращал ненулевое сравнение для двух значений, которые возвращают true по сравнению с equals.

Если вы считаете, что наличие сравнения требует от вас изменить определение того, что означает для двух вещей, чтобы быть равным, то вы, вероятно, разработали что-то плохое.

Смежные вопросы