Enumeração vs Iterador
Existem muitas estruturas de dados que atuam como coleções em Java, como Vetores, tabelas Hash e classes que implementam o Java Collections Framework (ou seja, HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap e LinkedHashSet). Existem várias maneiras de iterar pelos elementos individuais dos objetos em Java. Java fornece duas interfaces para facilitar essa tarefa. Enumeração e Iterador são duas das interfaces encontradas no pacote java.util que fornecem funcionalidade para enumerar por meio de seqüências ou objetos com um conjunto de itens. O enumerador foi introduzido no JDK 1.0 e o Iterator, que foi introduzido no JDK 1.2, praticamente duplica a funcionalidade do enumerador (dentro da estrutura de coleções).
O que é enumeração?
A enumeração é uma interface pública em Java, introduzida no JDK 1.0, que fornece a capacidade de enumerar por meio de sequências de elementos. Pode ser encontrada no pacote java.util. Quando a interface de enumeração é implementada por um objeto, esse objeto pode gerar uma sequência de elementos. Interface de enumeração tem dois métodos. O método hasMoreElements () testará se essa enumeração contém mais elementos e o nextElement () retorna o próximo elemento na sequência (se houver pelo menos mais um). Em outras palavras, chamando nextElement () sucessivamente, o programador pode acessar os elementos individuais da série. Por exemplo, para imprimir todos os elementos no Vector v1 usando o Enumerator, o seguinte trecho de código pode ser usado.
Enumeração e = v1.elements ();
While (e.hasMoreLements ())
System.out.println (e.nextElement ());
O enumerador também pode ser usado para definir o fluxo de entrada para os objetos SequenceInputStream.
O que é o Iterator?
O iterador é uma interface pública no pacote Java.util, que permite a iteração através de elementos dos objetos de coleções que implementam a estrutura de coleções (como ArrayList, LinkedList, etc.). Isso foi introduzido no JDK 1.2 e substituiu o Enumerator no Java Collections Framework. O iterador tem três métodos. O método hasNext () testa se há elementos restantes na coleção e o método next () retorna o próximo elemento da série. O método remove () pode ser usado para remover o elemento atual da coleção subjacente. Por exemplo, para imprimir todos os elementos no Vector v1 usando o Iterator, o seguinte snippet de código pode ser usado.
Iterador i = v1.elements ();
Enquanto (i.hasNext ())
System.out.println (e.next ());
Qual é a diferença entre Enumeração e Iterador?
Embora Enumeração e Iterador sejam duas das interfaces encontradas no pacote java.util, que permitem iterar / enumerar elementos de uma série, eles têm suas diferenças. Na verdade, o Iterator, que foi introduzido após a Enumeração, substitui a Enumeração na estrutura Java Collections. Diferentemente da Enumeração, o Iterator é à prova de falhas. Isso significa que modificações simultâneas (para a coleção subjacente) não são permitidas quando o Iterator é usado. Isso é muito útil em ambientes multiencadeados, onde sempre existe o risco de modificações simultâneas. No caso de uma modificação simultânea, o objeto Iterator lançará uma ConcurrentModificationException. O iterador possui nomes de métodos mais curtos em comparação com o enumerador. Além disso, o iterador tem a funcionalidade adicional de excluir elementos durante a iteração (o que não é possível usando o Enumerator). Portanto, se houver a necessidade de remover elementos da coleção, o Iterator é a única opção que pode ser considerada.