141 votes

Différence entre Java de l'Énumération et de l'Itérateur

Quelle est la différence exacte entre ces deux interfaces? N' Enumeration ont plus d'avantages à l'aide de Iterator? Si quelqu'un pourrait élaborer, un article de référence, serait appréciée.

158voto

coobird Points 70356

En regardant l'API Java cahier des charges pour l' Iterator interface, il y a une explication de la différence entre Enumeration:

Les itérateurs diffèrent de les énumérations de deux façons:

  • Les itérateurs permettre à l'appelant de supprimer des éléments dans le sous-jacent collection cours de l'itération avec sémantique bien définie.
  • Les noms de méthodes ont été améliorées.

La ligne du bas est, les deux Enumeration et Iterator donnera des éléments successifs, mais Iterator est améliorée de telle manière à ce que les noms de méthode plus courte et plus, remove méthode. Ici est un side-by-side de comparaison:

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

Comme mentionné dans l'API Java des Caractéristiques, pour des programmes plus récents, Iterator doit être préférée à l' Enumeration, comme "Itérateur prend la place de l'Énumération dans la Java des collections de cadre." (À partir de l' Iterator spécifications.)

41voto

shaILU Points 293

Les itérateurs sont fail-fast . c'est à dire que lorsqu'un thread modifie la collection par ajouter / supprimer des opérations , tandis qu'un autre thread est traversée par un Itérateur à l'aide de hasNext() or next() méthode, l'itérateur échoue rapidement en jetant ConcurrentModificationException . Le fail-fast comportement des itérateurs peuvent uniquement être utilisées pour détecter les bugs. Les Énumérations retournés par les méthodes des classes comme table de hachage, les Vecteurs ne sont pas fail-fast qui est atteint par la synchronisation du bloc de code à l'intérieur de l' nextElement() méthode qui verrouille le Vecteur courant de l'objet qui coûte beaucoup de temps.

13voto

Uri Points 50687

"Officiellement", ils sont censés être similaire à l'interface iterator l'appui des opérations supplémentaires (par exemple, suppression). En général, la tendance est d'utiliser des itérateurs.

Ici est à partir de l'interface d'énumération javadoc:

REMARQUE: Les fonctionnalités de cette interface est dupliqué par le L'interface Iterator. En outre, Itérateur ajoute une option de supprimer l'opération, et est plus courte de la méthode des noms. Les nouvelles implémentations devraient envisager l'utilisation d'un Itérateur de préférence le Dénombrement.

7voto

Earth Engine Points 1795

Un simple fait, mais qui n'ont pas été mentionnés dans les réponses précédentes est qu' Iterator<T> est utilisé avec Iterable<T> pour servir à interpréter for(_type_ element:collection){...} de la structure.

3voto

Licky Lindsay Points 947

Si vous écrivez votre propre classe de collection, et vous étendez une des classes existantes ou la mise en œuvre de l'une quelconque des Collections cadre des interfaces, vous avez essentiellement n'avez pas le choix mais pour utiliser l'Itérateur.

Si pour une raison quelconque (que je ne peux pas penser à vous, vous êtes en train de créer une collection personnalisée de classe qui ne sont pas liées à java.util.Collection ou java.util.La carte en quelque sorte, vous devriez toujours mettre en œuvre Itératif afin que les gens peuvent utiliser votre classe dans les boucles for.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X