Qual è l'interfaccia Iterable usato per?
Domanda
Sono un principiante e non riesco a capire l'effetto reale del Iterable
interfaccia.
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.