Può essere una soluzione.
Altre tre soluzioni potrebbero essere le seguenti:

1) Usare un semplice ArrayList<Codice>. Quando viene generato un codice, verifichi se questo è già presente nell'ArrayList ( metodo contains() ). Se non c'è, lo inserisci, altrimenti è già stato usato.

2) Usare HashSet<Codice>. Quando viene generato un codice, provi ad inserirlo. Se l'inserimento ritorna true, significa che il codice è buono, altrimenti era già stato usato.

3) Usare un TreeSet<Codice>. Quando viene generato un codice, provi ad inserirlo (metodo add() che ritorna un boolean). Se l'inserimento va a buon fine, ok, altrimenti significa che il codice è già stato inserito in precedenza, quindi è già stato usato.

Sinceramente, non userei TreeSet, poichè tale struttura dati mantiene anche un ordinamento degli elementi, che a te non interessa, quindi sarebbe solo un aggravio ingiustificato.

Non userei nemmeno ArrayList poichè avresti un'inefficienza nell'uso di contains() che deve spazzolarsi tutti gli elementi.

Io userei HashSet.

Ciao.