Implementare correttamente Comparable e Comparator
Per fare in modo che l’implementazione di Comparable e Comparator definiscano un corretto criterio di ordinamento, bisogna rispettare alcune proprietà.
Dati due oggetti x e y, appartenenti ad una classe che implementa Comparable, devono valere le seguenti proprietà:
- Riflessività, x.compareTo(x) == 0
- Antisimmetria,
x.compareTo(y) < 0 se e solo se y.compareTo(x) > 0
x.compareTo(y) == 0 se e solo se y.compareTo(x) == 0 - Transitività,
x.compareTo(y) < 0 e y.compareTo(z) < 0 allora x.compareTo(z) < 0
Inoltre, è consigliata ma non obbligatoria:
- Coerenza, x.equals(y) == true se e solo se x.compareTo(y)==0
Quest’ultima proprietà è detta condizione di coerenza tra compareTo (ordinamento) ed equals (uguaglianza), infatti indica che compareTo è compatibile con equals su cosa si può considerare uguale. E’ consigliato rispettare questa regola perché ci sono alcune collezioni che le utilizzano entrambe e se non venisse rispettata potremmo ricevere dei risultati inattesi.
In modo del tutto simile, queste proprietà valgono anche per l’interfaccia Comparator.
Indice | Lezione Precedente – Lezione Successiva |
Lascia un commento