Domanda

Sono un principiante e non riesco a capire l'effetto reale del Iterable interfaccia.

È stato utile?

Soluzione

Oltre a ciò che ha detto Jeremy, il suo principale vantaggio è che ha un proprio 'di zucchero sintattico: migliorato per-loop . Se avete, diciamo, un Iterable<String>, si può fare:

for (String str : myIterable) {
    ...
}

Nizza e facile, non è vero? Tutto il lavoro sporco di creazione del Iterator<String>, controllando se hasNext(), e chiamando str = getNext() viene gestito dietro le quinte da parte del compilatore.

E dal momento che la maggior parte delle collezioni sia implementare Iterable o hanno una vista che restituisce uno (come Map s 'keySet() o values()), questo rende il lavoro con collezioni molto più facile.

Il Javadoc <=> dà una lista completa delle classi che implementano <=>.

Altri suggerimenti

Se si dispone di un set di dati complessi, come un albero o una coda elicoidale (sì, ho appena fatto che fino), ma non si preoccupano come è strutturato internamente, si vuole solo ottenere tutti gli elementi uno per uno, lo si ottiene per restituire un iteratore.

L'oggetto complesso in questione, sia esso un albero o una coda o un WombleBasket implementa Iterable, e può restituire un oggetto iteratore che è possibile interrogare utilizzando i metodi Iterator.

In questo modo, si può solo chiedere se esso hasNext(), e se lo fa, si ottiene il next() voce, senza preoccuparsi dove trovarlo dall'albero o dovunque.

Si restituisce un java.util.Iterator. È utilizzato principalmente per essere in grado di utilizzare il tipo di applicazione nel migliorato ciclo

List<Item> list = ...
for (Item i:list) {
 // use i
}

Sotto il cofano il compilatore chiama la list.iterator() e itera ti dà la i all'interno del ciclo for.

L'interfaccia è al suo cuore un elenco di metodi che una classe deve implementare. L'interfaccia è molto semplice iterabile - c'è solo un metodo per implementare: Iterator(). Quando una classe implementa l'Iterable interfaccia, sta dicendo altre classi che si possono ottenere un oggetto Iterator da utilizzare per iterare (vale a dire, traverse) i dati in oggetto.

Gli iteratori fondamentalmente consentire l'iterazione su qualsiasi Collection.

E 'anche ciò che è necessario per utilizzare Java for-each istruzione di controllo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top