Explication des avertissements #
Cette page présente divers avertissements pouvant survenir lors de la
vérification de la validité d’une implémentation de Comparator
. Chaque
avertissement correspond à une propriété contractuelle spécifique qu’un
comparateur bien implémenté devrait respecter.
ANTI_SYMMETRY
#
Un comparateur viole l’anti-symétrie s’il renvoie des résultats
incohérents lorsque l’ordre de ses arguments est inversé. Plus
précisément, pour tous objets x
et y
, si compare(x, y) < 0
, alors
compare(y, x)
devrait renvoyer une valeur supérieure à 0.
CONSISTENCY
#
Un comparateur manque de cohérence s’il donne des résultats différents lors de la comparaison d’une même paire d’objets à plusieurs reprises, en supposant qu’aucune modification n’a été apportée aux objets. La cohérence garantit que les appels répétés du comparateur produisent le même résultat pour les mêmes entrées.
CONSISTENT_WITH_EQUALS
#
Un comparateur est incohérent avec equals
s’il considère deux objets
comme égaux (c’est-à-dire, compare(x, y) == 0
) mais que x.equals(y)
renvoie false
. Pour qu’un comparateur soit cohérent avec equals
,
l’égalité implicite par le comparateur devrait s’aligner avec la méthode
equals
des objets comparés.
REFLEXIVITY
#
Un comparateur viole la réflexivité s’il ne renvoie pas zéro lors de la
comparaison d’un objet avec lui-même. Autrement dit, pour tout objet
x
, compare(x, x)
devrait toujours renvoyer 0.
TRANSITIVITY
#
Un comparateur manque de transitivité s’il ne maintient pas un ordre
cohérent au travers de multiples comparaisons. Plus précisément, si
compare(x, y) < 0
et compare(y, z) < 0
, alors compare(x, z)
devrait également être inférieur à 0. La violation de la transitivité
peut conduire à des comportements de tri imprévisibles et erronés.
SERIALIZABLE
#
Désactivé par défaut.
Un comparateur devrait implémenter l’interface Serializable
s’il est
destiné à être utilisé dans des contextes nécessitant la sérialisation,
comme dans des structures de données sérialisables telles que TreeSet
ou TreeMap
. Le non-respect de cette exigence peut entraîner des
exceptions à l’exécution lors de tentatives de sérialisation.