Objetivos
ListIterator
Um ListIterador é um iterador que nos dá acesso elemento a elemento de uma coleção de
forma bidirecional e permite executar algumas operações. O ListIterator é usado apenas por
coleções ArrayList, LinkedList e outras classes que herdam da interface List.
Tab. 1: Abstração de um ListIterador 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 bidirecional
- Homogêneo
Interfaces implementadas
- ListIterator<E>
Para a utilização da interface ListIterator, precisamos importar sua classe como na sintaxe abaixo:
Sintaxe
import java.util.ListIterator;
Para os exemplos seguintes, vamos utilizar a classe ArrayList de forma superficial para exemplificar o uso
da interface ListIterator. 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.
Recuperando um ListIterator
Para recupermos um ListIterador, precisamos invocar o método listIterator pertencente à uma
classe de coleção, container ou estrutura de dados que implementem a ListIterator.
Sintaxe
variavel_colecao.listIterator();
Retorno
Iterator<E>
Exemplo 1
//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>();
Iterator it = al.listIterator();
}
}
Saída
-
Métodos da classe ArrayList
A interface java.util.ListIterator fornece métodos para manipular seus dados. Abaixo uma lista de todos os
métodos dessa interface.
Tab. 1: Métodos ListIterator
Método |
Descrição |
add(E e) |
Adicionar um elemento |
hasNext |
Verifica se há um próximo elemento |
hasPrevious |
Verifica se há elemento anterior |
next |
Retorna o próximo elemento |
nextIndex |
Retorna índice do próximo elemento |
previousIndex |
Verifica se há elemento anterior |
remove |
remove um elemento |
set |
Atualiza ou substitui um elemento |
Com essa sobrecarga do método add, podemos adicionar um elemento no fim de uma coleção
de dados.
Sintaxe
public void add(E e)
Onde
e: elemento para adicionar
E: Tipo de dado do ListIterator
Retorno
true
Exception
UnsupportedOperationException
ClassCastException
IllegalArgumentException
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("De");
al.add("String");
System.out.println(al);
ListIterator it = al.listIterator(); //posição 0
it.next(); //posição 1
it.add("ListIterator");
System.out.println(al);
}
}
Saída
[Um, De, String]
[Um, ListIterator, De, String]
Com o método hasNext, podemos verificar se existe um próximo elemento em uma
coleção de dados.
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.ListIterator;
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.listIterator();
System.out.print(it.hasNext());
}
}
Saída
true
Com o método hasPrevious, podemos verificar se existe um elemento anterior em
uma coleção de dados em relação a posição atual no iterador.
Sintaxe
public boolean hasPrevious()
Retorno
true se existe um próximo elemento, false caso contrário.
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");
Iterator it = al.listIterator();
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("ListIterator");
al.add("De");
al.add("String");
Iterator it = al.listIterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
Saída
Um
ListIterator
De
String
O método nextIndex retorna o índice do próximo elemento. Esse método não recebe
argumentos e retorna um inteiro.
Sintaxe
public E nextIndex()
Onde
E: tipo de dado utilizado
Retorno
Inteiro contendo o índice do próximo elemento ou size() se fim da coleção.
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");
Iterator it = al.listIterator();
System.out.println(it.nextIndex());
}
}
Saída
0
O método previousIndex retorna o índice do elemento anterior ao atual. Esse método
não recebe argumentos e retorna um inteiro.
Sintaxe
public E nextIndex()
Onde
E: tipo de dado utilizado
Retorno
Inteiro contendo o elemento elemento do iterador ou -1 se início da coleção.
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("ArrayList");
al.add("De");
al.add("String");
ListIterator it = al.listIterator();
it.next();
System.out.println(it.previousIndex());
it.previous();
System.out.println(it.previousIndex());
}
}
Saída
0
-1
Com o método remove podemos excluir um elemento na posição atual do iterador da coleção.
Deve ser usado apenas uma vez após a chamada do método next.
Sintaxe
public void remove()
Exception
UnsupportedOperationException
IllegalStateException
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");
System.out.println(al);
Iterator it = al.listIterator();
it.next();
it.remove();
System.out.println(al);
}
}
Saída
[Um, ArrayList, De, String]
[ArrayList, De, String]
Utilizando o método set podemos substituir ou atualizar o elemento atual apontado
pelo iterador. Deve ser utilizado somente após a chamada dos métodos next ou previous.
Sintaxe
public void set(E e)
Onde
e: elemento ou valor para atualização
Exception
UnsupportedOperationException
ClassCastException
IllegalArgumentException
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("X");
al.add("De");
al.add("String");
System.out.println(al);
ListIterator it = al.listIterator();
it.next();//Um
it.next();//X
it.set("ListIterator"); //X <- ListIterator
System.out.println(al);
}
}
Saída
[Um, X, De, String]
[Um, ListIterator, De, String]
Histórico de atualizações
- 24/07/2025 - revisão 3 - correções pontuais; ajustes: sintaxes, Tab.1 links movidos para métodos
- 24/09/2024 - revisão 2 - Correção em exemplo 'next'/'nextIndex'; outros ajustes
- 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.