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.