Le proprietà di Comparable e Comparator – Lezione 19 di Java Avanzato

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 PrecedenteLezione Successiva

Pubblicato in Guide, Java, Programmazione Taggato con: , , , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*