Stamattina, un po' più "fresco", ho riletto la discussione, prestando più attenzione anche a quel main() dove si vede es. insieme1.put(3);
Credo di aver "equivocato" un po' la tua richiesta, perché inizialmente mi pareva di aver capito un'altra cosa. Da quanto deduco, ti è stato chiesto di implementare sostanzialmente un "bit set" (poi se la classe la chiami BoolSet .. è lo stesso), che contiene un array di boolean ciascuno con un proprio indice che è quello usato da chi usa un oggetto BoolSet.
In sostanza se fai es.:
Ins insieme1 = new BoolSet();
insieme1.put(3);
insieme1.put(4);
insieme1.put(2);
insieme1.put(7);
Vuol dire rappresentare l'insieme dei valori {3,4,2,7}
In pratica tu dall'esterno di BoolSet NON vedi dei boolean ma dei numeri. L'array interno di boolean serve solo per fare da "sequenza di bit" per cui un valore es. 3 (correlato al quarto boolean) "c'è" o "non c'è".
Se è così, (confermamelo!), allora le cose vanno diversamente. Vuol dire che quando andrai ad iterare NON vedrai i boolean ma i numeri. Cioè iterando sul insieme1 dovrai ottenere in sequenza 3 ... 4 ... 2 ... 7
In tal caso allora:
a) Il Iterator sarà Iterator<Integer>
b) quindi
public Iterator<Integer> iterator()
c) vuol anche dire che devi
per forza implementare tu l'iteratore. Anche se, per dire, in BoolSet tenessi un List<Boolean>, NON potresti sfruttare il suo iteratore.
Con questi chiarimenti, verifica bene cosa fare, poi si potrà vedere.