Java - como usar o Iterator?
Freqüentemente, você desejará percorrer os elementos de uma coleção. Por exemplo, você pode querer exibir cada elemento. A maneira mais fácil de fazer isso é empregar um iterador, que é um objeto que implementa a interface Iterator ou ListIterator.
Iterator permite que você percorra uma coleção, obtendo ou removendo elementos. ListIterator estende Iterator para permitir a passagem bidirecional de uma lista e a modificação de elementos.
Antes de acessar uma coleção por meio de um iterador, você deve obter um. Cada uma das classes de coleção fornece um método iterator () que retorna um iterador para o início da coleção. Ao usar este objeto iterador, você pode acessar cada elemento da coleção, um elemento por vez.
Em geral, para usar um iterador para percorrer o conteúdo de uma coleção, siga estas etapas -
Obtenha um iterador para o início da coleção chamando o método iterator () da coleção.
Configure um loop que faça uma chamada para hasNext (). Faça com que o loop itere enquanto hasNext () retornar verdadeiro.
Dentro do loop, obtenha cada elemento chamando next ().
Para coleções que implementam List, você também pode obter um iterador chamando ListIterator.
Os métodos declarados pelo Iterator
Sr. Não. | Método e Descrição |
---|---|
1 | boolean hasNext( ) Retorna verdadeiro se houver mais elementos. Caso contrário, retorna falso. |
2 | Object next( ) Retorna o próximo elemento. Lança NoSuchElementException se não houver um próximo elemento. |
3 | void remove( ) Remove o elemento atual. Lança IllegalStateException se for feita uma tentativa de chamar remove () que não seja precedida por uma chamada para next (). |
Os métodos declarados por ListIterator
Sr. Não. | Método e Descrição |
---|---|
1 | void add(Object obj) Insere obj na lista na frente do elemento que será retornado na próxima chamada para next (). |
2 | boolean hasNext( ) Retorna verdadeiro se houver um próximo elemento. Caso contrário, retorna falso. |
3 | boolean hasPrevious( ) Retorna verdadeiro se houver um elemento anterior. Caso contrário, retorna falso. |
4 | Object next( ) Retorna o próximo elemento. Uma NoSuchElementException é lançada se não houver um próximo elemento. |
5 | int nextIndex( ) Retorna o índice do próximo elemento. Se não houver um próximo elemento, retorna o tamanho da lista. |
6 | Object previous( ) Retorna o elemento anterior. Uma NoSuchElementException é lançada se não houver um elemento anterior. |
7 | int previousIndex( ) Retorna o índice do elemento anterior. Se não houver um elemento anterior, retorna -1. |
8 | void remove( ) Remove o elemento atual da lista. Uma IllegalStateException é lançada se remove () é chamado antes de next () ou previous () ser chamado. |
9 | void set(Object obj) Atribui obj para o elemento atual. Este é o último elemento retornado por uma chamada para next () ou anterior (). |
Exemplo
Aqui está um exemplo que demonstra Iterator e ListIterator. Ele usa um objeto ArrayList, mas os princípios gerais se aplicam a qualquer tipo de coleção.
Obviamente, ListIterator está disponível apenas para as coleções que implementam a interface List.
import java.util.*;
public class IteratorDemo {
public static void main(String args[]) {
// Create an array list
ArrayList al = new ArrayList();
// add elements to the array list
al.add("C");
al.add("A");
al.add("E");
al.add("B");
al.add("D");
al.add("F");
// Use iterator to display contents of al
System.out.print("Original contents of al: ");
Iterator itr = al.iterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
// Modify objects being iterated
ListIterator litr = al.listIterator();
while(litr.hasNext()) {
Object element = litr.next();
litr.set(element + "+");
}
System.out.print("Modified contents of al: ");
itr = al.iterator();
while(itr.hasNext()) {
Object element = itr.next();
System.out.print(element + " ");
}
System.out.println();
// Now, display the list backwards
System.out.print("Modified list backwards: ");
while(litr.hasPrevious()) {
Object element = litr.previous();
System.out.print(element + " ");
}
System.out.println();
}
}
Isso produzirá o seguinte resultado -
Resultado
Original contents of al: C A E B D F
Modified contents of al: C+ A+ E+ B+ D+ F+
Modified list backwards: F+ D+ B+ E+ A+ C+