Quando usar Coleções - Parte III
Antes de começarmos a falar sobre Iterators, vamos relembrar o conceito de Lista de Objetos.
Listas de Objetos são coleções onde elementos repetidos podem ocorrer e onde os elementos têm posições definidas, para simplificar, podemos afirmar que listas são como arrays com características adicionais, sendo que destas a que mais merece destaque é a capacidade de seu tamanho a ser modificado de acordo com a necessidade.
Já havia sido comentado no artigo anterior que a interface List declara métodos que podem ser usados para manipular listas e também sobre a existência de duas classes que implementam a interface List: ArrayList e LinkedList. Também comparamos as vantagens e desvantagens destas duas classes.
Após essa recapitulação vamos agora falar sobre Iterators.
Iterators
Quando usar Iterators ?
Há ocasiões (e não são poucas) em que precisamos que nosso programa percorra um a um os elementos que estão dentro de um objeto de coleção.
Uma boa solução para resolver essa situação é criar uma variável que varra o conjunto de elementos, montar um índice variando do primeiro elemento até o último.
Com isso em vez de escrever:
public class Lista3 {
public static void main(String[] args) {
ArrayList lista2 = new ArrayList();
lista2.add("Dinardo");
lista2.add("Rosa");
lista2.add("Rafa");
lista2.add("Anderson");
lista2.add("Alex");
for (int i = 0; i < lista2.size(); i++) {
System.out.println(lista2.get(i));
}
}
}
Com o uso de iterators o código ficaria assim:
package javaapplication1teste;
import java.util.ArrayList;
import java.util.Iterator;
public class Lista3 {
public static void main(String[] args) {
ArrayList lista2 = new ArrayList();
lista2.add("Dinardo");
lista2.add("Rosa");
lista2.add("Rafa");
lista2.add("Pingo");
lista2.add("Alex");
Iterator i = lista2.iterator();
while(i.hasNext()) {
System.out.println(i.next()) ;
}
}
}
O resultado:
Dinardo
Rosa
Rafa
Pingo
Alex
Provavelmente você deve estar se perguntando para que tudo isso?
No segundo código nós efetuamos uma iteração sobre um conjunto de elementos, dentro de um objeto de coleção, no nosso exemplo este era do Tipo ArrayList.
Além de percorrer elementos, o Iterator pode também remover elementos. Além disso, trata-se de uma interface que encontra implementações dentro de todos os grupos de coleções.
O Iterator quando usado para acessar elementos em um LinkedList tem um desempenho muito superior ao de um loop for, quando acessando elementos em um ArrayList o desempenho é similar ao de um for.
Outras formas de Iteração
ListIterator
ListIterator só é aplicado em listas, permite avançar e também retroceder, para isso utiliza-se o metódo previous().
A seguir veremos um exemplo de como ficaria o código anterior. Observe que no código a seguir, o ArrayList será varrido do último elemento até o primeiro:
// Usando listIterator
package javaapplication1teste;
import java.util.ArrayList;
import java.util.ListIterator;
public class Lista3 {
public static void main(String[] args) {
ArrayList lista2 = new ArrayList();
lista2.add("Dinardo");
lista2.add("Rosa");
lista2.add("Rafa");
lista2.add("Pingo");
lista2.add("Alex");
ListIterator l = lista2.listIterator(lista2.size());
while(l.hasPrevious()) {
System.out.println(l.previous()) ;
}
}
O Resultado seria algo como:
Alex
Pingo
Rafa
Rosa
Dinardo
A primeira implementação de iteração é chamada por Enumeration, ela ocorre apenas no Vector, que por ser antigo, não é mais recomendável o seu uso.
No próximo artigo falaremos sobre os Objetos do tipo SET.
Fontes de Inspiração para este e os outros dois artigos
Introdução Á Programação Orientada a Objetos Usando Java
Autor Rafael Santos
Java Como Programar 4ª Edição
Deitel e Deitel
Universidade Java
Franco Yoshida