Это объясняется в JavaDocs :
Естественный порядок для класса C
называется в соответствии с равным , если и толькоесли e1.compareTo(e2) == 0
имеет то же логическое значение, что и e1.equals(e2)
для каждого e1
и e2
класса C
Обратите внимание, что не требуется , т.е.Если два класса равны в соответствии с compareTo()
, они не должны содержать equals()
.Это хорошо, потому что вы можете, например, сортировать людей по возрасту, поэтому два человека с одинаковым возрастом считаются равными по Comparator<Person>
, но они, очевидно, не должны быть равными.
Однако в этомВ конкретном случае вы можете захотеть добавить вторичные атрибуты в компаратор, если возраст равен (поэтому сортировка всегда стабильна и предсказуема для людей одного возраста), поэтому в некоторых случаях включение одних и тех же атрибутов в compareTo()
может быть хорошей идеей в некоторых случаях.