FabioJ ha scritto:
Mi viene proposto un esercizio per comprendere l'uso TreeSet<T> e HashSet<T>.
Ci sono quasi arrivato pero' ho qualche dubbio.
Da questo dovrei capire la differenza tra HashSet e TreeSet
pero' ancora non ci sono .
TreeSet è basato internamente su un albero binario e
mantiene ordinati gli elementi basandosi sul contenuto degli oggetti stessi. TreeSet si basa SOLO sul compareTo (Comparable) oppure compare (Comparator). Insomma, NON usa equals/hashCode.
HashSet è basato internamente su una hash-table e pertanto usa SOLO equals/hashCode.
Il punto è che nel tuo Libro equals/hashCode usano anno
E titolo mentre il compareTo usa solo l'anno !! Questo vuol dire che per TreeSet i due oggetti sono "uguali" e questo è il motivo per cui vedi
set1.size()=1
P.S. solo due note:
- il hashCode() è tecnicamente corretto ma si può migliorare sulla distribuzione dei codici.
- in equals() il cast diretto NON va bene in generale. Bisogna sempre prima testare il tipo.