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.
-
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).