O Iterator é uma interface em Java que permite percorrer elementos em uma coleção de forma estruturada, permitindo acesso a cada item sequencialmente sem expor os detalhes internos da coleção. Ele é amplamente utilizado com as classes de coleção do pacote java.util
, como ArrayList
, LinkedList
, HashSet
e outras.
Conceito do Iterator
O Iterator
simplifica a navegação por elementos em uma coleção e fornece três métodos principais:
- hasNext(): Verifica se há mais elementos na coleção a serem iterados.
- next(): Retorna o próximo elemento da coleção.
- remove(): Remove o último elemento retornado pelo iterator da coleção.
Esses métodos permitem manipular elementos durante a iteração, tornando-o útil para percorrer, modificar e filtrar coleções.
Como Usar o Iterator
Para demonstrar o uso do Iterator
, vamos ver um exemplo com uma lista de elementos:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ExemploIterator {
public static void main(String[] args) {
List<String> nomes = new ArrayList<>();
nomes.add("Ana");
nomes.add("Bruno");
nomes.add("Carlos");
nomes.add("Diana");
// Criando o Iterator
Iterator<String> iterator = nomes.iterator();
// Percorrendo a coleção usando o Iterator
System.out.println("Percorrendo a lista de nomes:");
while (iterator.hasNext()) {
String nome = iterator.next();
System.out.println(nome);
}
}
}
Saída Esperada
Percorrendo a lista de nomes:
Ana
Bruno
Carlos
Diana
Neste exemplo, usamos o hasNext()
para verificar se há elementos restantes na lista e next()
para acessar cada elemento. Esse método é muito eficiente para listas e coleções de grandes tamanhos.
Modificando a Coleção Durante a Iteração
Um dos pontos fortes do Iterator
é a capacidade de remover elementos durante a iteração sem provocar erros de modificação concorrente. Veja como podemos remover elementos específicos:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class RemoverElementos {
public static void main(String[] args) {
List<String> nomes = new ArrayList<>();
nomes.add("Ana");
nomes.add("Bruno");
nomes.add("Carlos");
nomes.add("Diana");
Iterator<String> iterator = nomes.iterator();
// Removendo o nome "Carlos" durante a iteração
while (iterator.hasNext()) {
String nome = iterator.next();
if ("Carlos".equals(nome)) {
iterator.remove();
}
}
System.out.println("Lista após remoção de 'Carlos': " + nomes);
}
}
Saída Esperada
Lista após remoção de 'Carlos': [Ana, Bruno, Diana]
O método remove()
do Iterator
permite a remoção segura de elementos durante a iteração, evitando exceções de modificação da coleção.
For-each vs. Iterator
O laço for-each simplifica a iteração e é uma ótima opção para percorrer coleções quando não há necessidade de modificar a coleção. No entanto, ele não permite a remoção de elementos durante a iteração, diferentemente do Iterator
. Abaixo, vemos a diferença entre os dois métodos:
Exemplo de for-each
for (String nome : nomes) {
System.out.println(nome);
}
Exemplo com Iterator
Iterator<String> iterator = nomes.iterator();
while (iterator.hasNext()) {
String nome = iterator.next();
System.out.println(nome);
}
Conclusão
O Iterator
em Java oferece uma maneira poderosa de percorrer coleções com flexibilidade, especialmente para remover elementos de maneira segura durante a iteração. Ele é essencial para manipular coleções de forma eficiente e controlar o processo de iteração de acordo com as necessidades específicas do código.
Deixe um comentário