Pergunta

Qual é a diferença exata entre estas duas interfaces? Does Enumeration tem vantagens sobre usando Iterator ? Se alguém poderia elaborar, um artigo de referência seria apreciada.

Foi útil?

Solução

Olhando para o Especificação Java API para a Iterator interface, há uma explicação das diferenças entre Enumeration :

Iterators diferir enumerações de duas maneiras:

  • Iterators permitir que o chamador para remover elementos do subjacente coleção durante a iteração com semântica bem definida.
  • Os nomes de métodos foram melhorados.

A linha inferior é, tanto Enumeration e Iterator dará elementos sucessivos, mas Iterator é melhorada em tal maneira um modo que os nomes dos métodos são mais curtas, e tem um método remove adicional. Aqui está uma comparação lado-a-lado:

  Enumeration                     Iterator
  ----------------                ----------------
  hasMoreElement()                hasNext()
  nextElement()                   next()
  N/A                             remove()

Como também mencionado nas Especificações da API Java, para programas mais recentes, Iterator deve ser preferido sobre Enumeration, como "Iterator toma o lugar de enumeração no âmbito coleções Java." (A partir dos Iterator especificações.)

Outras dicas

Iterators são fail-fast . isto é, quando um fio muda a recolha por operações de adicionar / remover, enquanto outro fio está atravessando-o através de um Repetidor utilizando o método hasNext() or next(), a iteração falhar rapidamente por atirar ConcurrentModificationException. O comportamento fail-fast da iterators só pode ser utilizada para detectar erros. As enumerações retornados pelos métodos de classes como Hashtable, Vector não são fail-rápido que é conseguido através da sincronização do bloco de código dentro do método nextElement() que bloqueia o objeto Vector atual que custa muito tempo.

"Oficialmente", que é suposto ser semelhante com a interface iterator apoio às operações de extras (por exemplo, remoção). Geralmente, a tendência é usar iteradores.

Aqui é de a enumeração interface de javadocs :

NOTA: A funcionalidade desta interface é duplicado pela Iterator interface. Além do que, além do mais, Iterator adiciona uma remoção opcional operação, e tem método mais curto nomes. Novas implementações devem considerar o uso de Iterator em preferência a enumeração.

Um fato simples, mas não ter mencionado nas respostas anteriores é que Iterator<T> é usado com Iterable<T> para servir na interpretação estrutura for(_type_ element:collection){...}.

Há três diferença básica em Enumeration e Iterator

Enumeration
1. é uso para única classe lagacy (eg. Vector)

    Enumeration e = v.elements();  
    v is the object of `Vector` class

2. operação de leitura pode ser executar, não podemos remover elemento.
3. Dois Método estão disponíveis

  • hasNextElement public boolean ();
  • public Object nextElement ();

Iterator

  1. é aplicável para todos Collection

    Iterator itr = c.iterator();  
    where c is any `Collection` class
    
  2. Leia e operação Remove pode ser executar

  3. Método três estão disponíveis

    • hasNext public boolean ();
    • public Object next ();
    • Remover public void ();

limition em ambos

  • Mover única direção para frente
  • Não há nenhum método para Add object e Replace object

Se você estiver escrevendo seu próprio classe de coleção, e você está estendendo qualquer uma das classes existentes ou implementar qualquer uma das interfaces quadro coleções, você basicamente tem escolha a não ser usar Iterator.

Se por alguma razão (que eu não posso pensar) que você está criando uma classe de coleção personalizada que não se relaciona com java.util.Collection ou java.util.Map de qualquer forma, você deve ainda implementar Iterable que as pessoas possam usar o seu na classe por loops.

A principal diferença é que a enumeração não expor método remove (). Além disso, Iterator não permitem uma navegação e modificação simultaneamente em um objeto subjacente. Eles têm um controle para ver se há modificações concorrentes ou assim, e, portanto, leva mais processamento. o desempenho de tão enumeração é praticamente 50% mais rápido do que Iterator. Se nós só precisamos de navegação ignorando tal sincronização, basta usar enumeração.

enumeração pode ser usado somente para a classe legado (Vector, Pilha ...), enquanto Iterator pode ser usado para todos.

Ambos iterador e enumeração são usados ??para recuperar os dados, a diferença é que a enumeração pode ser usado somente para as classes legadas ou seja vector / pilha enquanto iteradores podem ser usados ??para o resto. Enumeração também pode ser usado para o conjunto de chaves em mapas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top