Pergunta

Eu sou um novato e eu não consigo entender o efeito real da interface Iterable.

Foi útil?

Solução

Além do que Jeremy disse, a sua principal vantagem é que ele tem o seu próprio pouco de açúcar sintático: o reforçada loop for . Se você tem, digamos, um Iterable<String>, você pode fazer:

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

Nice e fácil, não é? Todo o trabalho sujo de criar a Iterator<String>, verificando se ele hasNext(), e chamando str = getNext() é tratado nos bastidores pelo compilador.

E uma vez que a maioria das coleções quer implementar Iterable ou ter uma visão que retorna um (como Map ou keySet() de values()), isso faz com que trabalhar com coleções muito mais fácil.

O Iterable Javadoc dá uma completa lista de classes que implementam Iterable.

Outras dicas

Se você tem um conjunto de dados complicado, como uma árvore ou uma fila helicoidal (sim, eu só inventei isso), mas você não se importam como está estruturada internamente, você só quer Pega todos os elementos, um por um, você obtê-lo para retornar um iterador.

O objeto complexo em questão, seja ele uma árvore ou uma fila ou uma implementos WombleBasket Iterable, e pode retornar um objeto iterador que você pode consultar usando os métodos Iterator.

Dessa forma, você pode simplesmente pedir-lo se ele hasNext(), e se isso acontecer, você obter o item next(), sem se preocupar onde obtê-lo a partir da árvore ou onde quer.

Ele retorna um java.util.Iterator. É usado principalmente para ser capaz de usar o tipo de aplicação no loop for aprimorado

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

Sob o capô o compilador chama o list.iterator() e repete-lo dando-lhe a i dentro do loop for.

Uma interface é na sua essência uma lista de métodos que uma classe deve implementar. A interface iterable é muito simples - não é apenas um método para implementar: Iterator(). Quando uma classe implementa a interface Iterable, ele está dizendo a outras classes que você pode obter um objeto Iterator ao uso para iterar sobre (ou seja, transversal) os dados no objeto.

Iterators basicamente permitir a iteração sobre toda a coleção.

É também o que é necessário para usar o Java for-each instrução de controle.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top