Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida Iterator

Tenho uma dúvida em relação ao uso do Iterator, até o momento não vi algo além em relação as Collections

package br.com.bytebank.banco.teste.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class Teste {

    public static void main(String[] args) {

     List<String> nomes = new ArrayList<>();
        nomes.add("Super Mario");
        nomes.add("Yoshi"); 
        nomes.add("Donkey Kong"); 

        Iterator<String> it = nomes.iterator();

        while (it.hasNext()) {
            System.out.println(it.next());
        };
    }
}    

O código acima, o mesmo usado no exemplo funciona sem problemas, mas alguém pode me dizer qual a diferença utilizando o método hasNext e next da lista em relação ao que pertence da classe Iterator?

Como está aqui no exemplo, ele entra em um laço eterno..

        while (nomes.iterator().hasNext()) {
            System.out.println(nomes.iterator().next());
        };
2 respostas
solução!

Hey Guilherme, beleza?

Ocorre o infinite loop pois a cada chamada ao método 'nomes.iterator()' é criada uma nova instancia do Iterator, que exibe o primeiro item e em seguida gera uma nova instancia que exibe seu primeiro item e assim sucessivamente.

Dá uma olhada nestes posts do stackoverflow:

https://stackoverflow.com/questions/37298398/java-endless-loop-with-listiterator-hasnext https://stackoverflow.com/questions/43376163/java-iterator-going-in-infinite-while-loop

Para evitar este comportamento, de fato é necessário colocar esta instancia em uma variável de referência, pois assim, é criada apenas uma única instancia de Iterator que o loop vai percorrer:

Iterator<String> it = nomes.iterator();

Espero ter ajudado!

Abs, ;)

Muito obrigado pela explicação Gabriela!

Entendi perfeitamente, não quis pesquisar direto até para ter algum auxílio adicional do pessoal no caso da dúvida.