Обяснение на предупрежденията #
Тази страница описва различни предупреждения, които могат да възникнат
при проверка на коректността на имплементация на Comparator
. Всяко
предупреждение съответства на конкретно договорно свойство, което добре
имплементиран компаратор трябва да спазва.
ANTI_SYMMETRY
#
Компаратор нарушава анти-симетрията, ако връща несъвместими резултати
при обръщане на реда на аргументите му. По-конкретно, за всякакви обекти
x
и y
, ако compare(x, y) < 0
, тогава compare(y, x)
трябва да
върне стойност по-голяма от 0.
CONSISTENCY
#
Компаратор липсва консистентност, ако дава различни резултати при сравняване на една и съща двойка обекти многократно, при условие че не са направени промени на обектите. Консистентността гарантира, че повтарящите се извиквания на компаратора произвеждат същия резултат за същите входни данни.
CONSISTENT_WITH_EQUALS
#
Компаратор е несъвместим с equals
, ако счита два обекта за равни (т.е.
compare(x, y) == 0
), но x.equals(y)
връща false
. За да бъде
компараторът съвместим с equals
, равенството, подразбирано от
компаратора, трябва да съответства на метода equals
на сравняваните
обекти.
REFLEXIVITY
#
Компаратор нарушава рефлексивността, ако не връща нула при сравняване на
обект със себе си. Тоест, за всеки обект x
, compare(x, x)
винаги
трябва да връща 0.
TRANSITIVITY
#
Компаратор липсва транзитивност, ако не поддържа последователен ред при
множество сравнения. По-конкретно, ако compare(x, y) < 0
и
compare(y, z) < 0
, тогава compare(x, z)
също трябва да бъде по-малко
от 0. Нарушаването на транзитивността може да доведе до непредсказуемо и
неправилно поведение при сортиране.
SERIALIZABLE
#
Деактивирано по подразбиране.
Компаратор трябва да имплементира интерфейса Serializable
, ако се
предвижда да се използва в контексти, където се изисква сериализация,
като например в сериализируеми структури от данни като TreeSet
или
TreeMap
. Неспазването на това може да доведе до изключения по време на
изпълнение при опит за сериализация.