Originariamente inviata da
Giuso
però era richiesto l'uso di Iterator e Iterable, ho anche il metodo @Override nella classe di implementazione dell'esercizio e non capivo come implementarlo
Mettiamola così, in modo che ti sia più chiaro. Se devi semplicemente usare delle collezioni del framework, non devi implementare Iterator/Iterable. Le collezioni sono già "iterabili". Le usi e le iteri come ti pare.
Discorso diverso invece se dovessi realizzare una nuova collezione "da zero" (tipicamente/sovente per motivi "didattici") oppure se fai una classe che rappresenta una composizione di N elementi (magari sfruttando al suo interno collezioni del framewok) e vuoi iterare su un oggetto della tua classe.
Ti faccio un esempio banale ma comprensibile: hai una classe Prodotto (un prodotto vendibile) e una classe Carrello. Carrello potrebbe avere al suo interno una lista di oggetti Prodotto così:
codice:
public class Carrello {
private List<Prodotto> prodotti = new ArrayList<Prodotto>();
// ....metodi di gestione....
}
Scritta così, NON puoi usare un oggetto Carrello direttamente come "target" del for-each.
codice:
Carrello carrello = new Carrello();
// ....
for (Prodotto prodotto : carrello) { // NO !
// ....
}
Se vuoi che il for-each sopra sia lecito, allora Carrello deve implementare Iterable<Prodotto> e deve avere un iterator() che tira fuori un Iterator<Prodotto>. Come lo implementi? La cosa più banale e veloce è sfruttare e restituire direttamente il Iterator della lista.
codice:
public class Carrello implements Iterable<Prodotto> {
private List<Prodotto> prodotti = new ArrayList<Prodotto>();
// ....metodi di gestione....
public Iterator<Prodotto> iterator() {
return prodotti.iterator();
}
}