Qual é a diferença exata entre essas duas interfaces? Tem Enumeration
benefícios sobre o uso Iterator
? Se alguém pudesse elaborar, um artigo de referência seria apreciado.
java
collections
iterator
enumeration
cometta
fonte
fonte
Respostas:
Observando a especificação da API Java da
Iterator
interface, há uma explicação das diferenças entreEnumeration
:A linha inferior é, ambos
Enumeration
eIterator
fornecerá elementos sucessivos, masIterator
é aprimorada de forma a que os nomes dos métodos sejam mais curtos e possuam umremove
método adicional . Aqui está uma comparação lado a lado:Como também mencionado nas Especificações da API Java, para programas mais recentes,
Iterator
deve ser preferívelEnumeration
, pois "O Iterator substitui a Enumeração na estrutura de coleções Java". (DasIterator
especificações.)fonte
Os iteradores são à prova de falhas . ou seja, quando um thread altera a coleção por operações de adição / remoção, enquanto outro thread o percorre através de um Iterator usando o
hasNext() or next()
método, o iterador falha rapidamente ao lançarConcurrentModificationException
. O comportamento de falha rápida dos iteradores pode ser usado apenas para detectar erros. As enumerações retornadas pelos métodos de classes como Hashtable, Vector não são à prova de falhas, o que é conseguido através da sincronização do bloco de código dentro donextElement()
método que bloqueia o objeto Vector atual, que custa muito tempo.fonte
"Oficialmente", eles devem ser semelhantes à interface do iterador que suporta operações extras (por exemplo, remoção). Geralmente, a tendência é usar iteradores.
Aqui é de interface de enumeração javadocs :
fonte
Um fato simples, mas não mencionado nas respostas anteriores,
Iterator<T>
é usadoIterable<T>
para servir nafor(_type_ element:collection){...}
estrutura de interpretação .fonte
Há três diferenças básicas em Enumeração e Iterador
Enumeração
1. é usado apenas para a classe de atraso (por exemplo
Vector
) .2. A operação de leitura pode ser executada, não podemos remover o elemento.
3. Dois métodos estão disponíveis
Iterador
é aplicável a todas as coleções
A operação de leitura e remoção pode ser realizada
Três métodos estão disponíveis
Limitação em ambos
Add object
eReplace object
fonte
Se você está escrevendo sua própria classe de coleção e está estendendo alguma das classes existentes ou implementando qualquer uma das interfaces da estrutura Collections, basicamente não tem outra opção a não ser usar o Iterator.
Se, por algum motivo (no qual não consigo pensar), você estiver criando uma classe de coleção personalizada que não se relaciona com java.util.Collection ou java.util.Map de qualquer forma, você ainda deve implementar o Iterable para que as pessoas possam usar sua classe para loops.
fonte
A principal diferença é que a enumeração não expõe o método remove (). Além disso, o Iterator não permite uma navegação e modificação simultânea em um objeto subjacente. Eles têm um controle para ver se há modificações simultâneas ou mais e, portanto, precisam de mais processamento. Portanto, o desempenho da Enumeração é praticamente 50% mais rápido que o Iterator. Se precisarmos apenas de navegação para ignorar essa sincronização, basta usar Enumeração.
fonte
1) A principal diferença entre Iterador e Enumeração é a remoção do elemento ao percorrer a coleção. O Iterator pode remover o elemento durante a travessia da coleção, pois possui o método remove (). A enumeração não possui o método remove ().
2) A enumeração é à prova de falhas por natureza. Não lança ConcurrentModificationException se Collection for modificado durante o percurso. O iterador é de falha rápida por natureza. Ele lança ConcurrentModificationException se uma coleção for modificada enquanto itera diferente de seu próprio método remove ().
3) A enumeração é uma interface herdada usada para atravessar Vector, Hashtable. O iterador não é uma interface herdada. O iterador pode ser usado para a travessia de HashMap, LinkedList, ArrayList, HashSet, TreeMap, TreeSet.
fonte
A enumeração pode ser usada apenas para a classe herdada (Vector, Stack ...), enquanto o Iterator pode ser usado para todos.
fonte
O iterador e a enumeração são usados para recuperar os dados, a diferença é que a enumeração pode ser usada apenas para classes herdadas, como vetor / pilha, enquanto os iteradores podem ser usados para o restante. A enumeração também pode ser usada para o conjunto de chaves nos mapas.
fonte