Quote Originariamente inviata da iTuring Visualizza il messaggio
Sto provando ad inserire in una lista HashSet dei clienti, ma quando inserisco due clienti con lo stesso nome vengono inseriti nella lista, come mai?
due oggetti uguali non li dovrebbe inserire nella lista. cosa sbaglio?
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.