
Originariamente inviata da
andbin
HashSet si basa sull'utilizzo del contratto tra equals/hashCode degli oggetti. Nel tuo Cliente
non hai fatto un override di equals (il parametro
deve essere Object!) ... ma un overload, che HashSet non sarebbe in grado di usare.
E nota: HashSet quindi non si basa su Comparable/Comparator.
Se ridefinisci correttamente equals(), devi ridefinire correttamente anche hashCode() per rispettare il contratto tra i due metodi. Se
violi il contratto .... succedono altre "brutte" cose nel HashSet.
P.S. Comparator non si implementa di norma nella classe degli oggetti da comparare! Ha generalmente poco senso. I Comparator (se ne possono avere N) si implementano in classi distinte dalla classe dei tuoi oggetti.