Pecorrendo Lista com Iterator

Sabemos que Iterator serve para pecorrer uma lista tipo ArrayList, mas tenho algumas duvidas:

Iterator<Contacto> it = listaFamilia.iterator(); - > vai servir para Criar um objeto iterator e vai referenciar o mesmo objeto de listaFamilia, tipo, tudo que acontecer com o iterator vai aconter com listaFamilia?

hasNext => sei que retorna um boolean, logo é importante para os laços while e for, para pecorrer a lista.

o iterator começa sem “posição”, ele começa “apontando” para nenhum objeto? ai quanto chama o metodo next dele é que ele aponta para o primeiro objeto é isso?

Obrigado

2 curtidas

o método next() retorna o próximo objeto da lista.

Iterator<Usuario> i = lista.iterator();
while (i.hasNext()) {  
   Usuario u = i.next();
   System.out.println(u);
}

Acho melhor com o For para percorrer lista após Java 5:

for(Usuario u : lista){
    System.out.println(u)
}

Primeiro.
Se vc não precisa remover algum dos elementos durante a iteração, não tem porque usar .iterator(), use o for aprimorado e seja feliz.

Mas quanto as suas perguntas:

    • vai servir para Criar um objeto iterator e vai referenciar o mesmo objeto de listaFamilia, tipo, tudo que acontecer com o iterator vai aconter com listaFamilia?
      Como todos os Objetos, exceto as Strings, todas as referências apontadas para o mesmo objeto irão alterar o mesmo objeto.

  1. hasNext => sei que retorna um boolean, logo é importante para os laços while e for, para pecorrer a lista.
    true

o iterator começa sem “posição”, ele começa “apontando” para nenhum objeto? ai quanto chama o metodo next dele é que ele aponta para o primeiro objeto é isso?
mais ou menos.
o iterator refencia o seu objeto (lista), o .next() retorna o próximo objeto da lista, então escrever .next() é o mesmo que fazer .get(i) num for normal.

Ex.

		while (iterator.hasNext()) {
			String tx = iterator.next();
			
			if(condicao)
				iterator.remove();
		}
		
		for (String texto : lista) {
			
			if(condicao)
				lista.remove(texto);
		}

A segunda iteração, na tentativa de remoção vai retornar algo do tipo

Exception in thread "main" java.util.ConcurrentModificationException

[quote=alquimistatutela]Sabemos que Iterator serve para pecorrer uma lista tipo ArrayList, mas tenho algumas duvidas:

(1) Iterator<Contacto> it = listaFamilia.iterator(); - > vai servir para Criar um objeto iterator e vai referenciar o mesmo objeto de listaFamilia, tipo, tudo que acontecer com o iterator vai aconter com listaFamilia?

hasNext => sei que retorna um boolean, logo é importante para os laços while e for, para pecorrer a lista.

(2) o iterator começa sem “posição”, ele começa “apontando” para nenhum objeto? ai quanto chama o metodo next dele é que ele aponta para o primeiro objeto é isso?

[/quote]

(1) É isso mesmo, e é por isso que é a forma preferida para remover elementos dessa coleção.
(2) Ele começa conceitualmente “uma posição antes da primeira posição”. É mais ou menos como você disse, ele não aponta para nenhum registro no começo.

Ou seja, você sempre precisa chamar hasNext para ver se há uma próxima posição, e “next” para pegar a primeira posição (nesse caso).