Objetivos
Iterator
Um iterador(Iterator) é um tipo de dado que nos dá acesso elemento a elemento de uma coleção de
forma unidirecional e nos permite executar algumas operações. O tipo Iterator é uma
interface e uma abstração de seu conteúdo e mostrado
abaixo:
Tab. 1: Abstração de um iterador sobre uma coleção de dados
início |
referência 0 |
referência 1 |
referência 2 |
(...) |
fim |
- |
elemento 0 |
elemento 1 |
elemento 2 |
(...) |
elemento N |
Algumas características
- Acesso unidirecional
- Homogêneo
Interfaces implementadas
- Iterator<E>
Para a utilização da interface Iterator<E>, precisamos importá-la como na sintaxe abaixo:
Sintaxe
import java.util.Iterator;
Para os exemplos seguintes, vamos utilizar a classe ArrayList de forma superficial para
exemplificar o uso da interface Iterator. Mais sobre ArrayList pode ser visto em
Estrutura de Dados/Coleção: ArrayList.
É necessário o conhecimento sobre o uso de Generics para melhor
compreensão dos exemplos.
Para recuperarmos um iterador, precisamos invocar o método iterator implementado pela classe
coleção, container ou outro.
Sintaxe
variavel_colecao.iterator();
Como Iterator<E> se trata de uma interface, não podemos instanciar um objeto utilizando a
palavra reservada new. Assim, declaramos um objeto do tipo Iterador
Sintaxe
Iterator nome_objeto;
Exemplo 1
//Main.java
import java.util.ArrayList;
import java.util.Iterator;
public class Main
{
public static void main(String[] args) {
ArrayList <String> al = new ArrayList <String>();
Iterator it = al.iterator();
}
}
Saída
-
Os iteradores apenas possuem recursos para iterarmos sobre elementos de coleções, não permitindo
por exemplo, adicionar ou alterar elementos.
Métodos da interface Iterator
A interface java.util.Interator fornece poucos métodos para manipular seus dados.
Abaixo uma lista de todos os métodos dessa interface que podem ser vistos clicando em seus nomes.
Tab. 1: Métodos Iterator
Método |
Descrição |
forEachRemaining |
Executa uma ação para cada elemento |
hasNext |
Verifica se há um próximo elemento |
next |
Retorna o próximo elemento |
remove |
remove um elemento |
Com o método forEachRemaining podemos executar um trecho de código para todos os
elementos de uma coleção. Uma expressão lambda é passada como argumento.
Sintaxe
public void forEachRemaining(Consumer<? super E> action)
Onde
action: Expressão lambda
E: Tipo de dado utilizado pelo elemento da coleção
Retorno
true
Exception
NullPointerException
Exemplo
//Main.java
import java.util.ArrayList;
import java.util.Iterator;
public class Main
{
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
//adição de elementos
al.add("Um");
al.add("ArrayList");
al.add("De");
al.add("String");
Iterator it = al.iterator();
//expressão lambda como argumento
it.forEachRemaining((el) -> {
System.out.println(el);
});
}
}
Saída
Um
ArrayList
De
String
Com o método hasNext, podemos verificar se existe um próximo elemento em uma coleção
de dados. Esse método não recebe argumentos.
Sintaxe
public boolean hasNext()
Retorno
true se existe um próximo elemento, false caso contrário.
Exemplo
//Main.java
import java.util.ArrayList;
import java.util.Iterator;
public class Main
{
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("Um");
al.add("ArrayList");
al.add("De");
al.add("String");
Iterator it = al.iterator();
System.out.print(it.hasNext());
}
}
Saída
true
O método next retorna o próximo elemento da coleção de acordo com o tipo de dado utilizado na
declaração. Esse método não recebe argumentos.
Sintaxe
public E next()
Onde
E: tipo de dado utilizado
Retorno
Próximo elemento do iterador
Exemplo
//Main.java
iimport java.util.ArrayList;
import java.util.Iterator;
public class Main
{
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("Um");
al.add("ArrayList");
al.add("De");
al.add("String");
Iterator it = al.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
Saída
Um
ArrayList
De
String
Com o método remove podemos excluir o elemento atual da coleção apontado pelo iterador.
Esse método deve ser usado apenas uma vez após a chamada do método next.
Sintaxe
public void remove()
Exception
UnsupportedOperationException
IllegalStateException
Exemplo
//Main.java
import java.util.ArrayList;
import java.util.ListIterator;
public class Main
{
public static void main(String[] args) {
ArrayList<String> al = new ArrayList<String>();
al.add("Um");
al.add("ListIterator");
al.add("De");
al.add("String");
System.out.println(al);
Iterator it = al.listIterator();
it.next();
it.remove();
System.out.println(al);
}
}
Saída
[Um, ListIterator, De, String]
[ListIterator, De, String]
Histórico de atualizações
- 24/07/2025 - revisão 3 - correções pontuais; adiçao: link 'interface; ajustes: sintaxes, Tab.1 links movidos para métodos
- 24/09/2024 - revisão 2 - correção: sintaxe 'remove'; ajustes pontuais
- 08/02/2024 - revisão 1 - correção em navegação e erros gramaticais
- 04/09/2023 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.