Originariamente inviato da LeleFT
Dipende da quello che serve a te.
HashMap non implementa l'interfaccia Set, quindi se a te servono le caratteristiche di un insieme, questa classe non ti è di alcuna utilità (a meno di non effettuare a mano diversi controlli sulla fattibilità di un inserimento).
HashSet è una implementazione base per un insieme in cui viene usato il valore dell'hashCode() degli oggetti per verificarne l'esistenza o meno nell'insieme e, di conseguenza, per permettere o meno l'inserimento di un oggetto. Non fornisce alcun meccanismo per il recupero diretto di un oggetto dall'insieme, ma solo un iteratore attraverto tutti gli elementi dell'insieme (iteratore che non garantisce alcun ordine di iterazione).
TreeSet è un insieme ordinato di oggetti, che fornisce, in più rispetto a HashSet, un ordinamento degli elementi secondo il loro natural-ordering. Fornisce, a tal proposito, un iteratore che permette di scorrere gli oggetti in modo ordinato. Inoltre permette di ottenere dall'insieme il più piccolo elemento che sia maggiore o uguale ad un oggetto dato.
Tutte queste cose sono ben documentate nelle relative documentazioni linkate.
Ciao.