Quelle est la différence exacte entre ces deux interfaces? At Enumeration
- il des avantages par rapport à l'utilisation Iterator
? Si quelqu'un pouvait élaborer, un article de référence serait apprécié.
java
collections
iterator
enumeration
cometta
la source
la source
Réponses:
En regardant la spécification de l'API Java pour l'
Iterator
interface, il y a une explication des différences entreEnumeration
:La ligne du bas est, à la fois
Enumeration
etIterator
donnera des éléments successifs, maisIterator
est améliorée de telle sorte que les noms de méthode sont plus courts et ont uneremove
méthode supplémentaire . Voici une comparaison côte à côte:Comme mentionné également dans les spécifications de l'API Java, pour les programmes plus récents,
Iterator
il faut préférerEnumeration
, car «Iterator remplace l'énumération dans le cadre des collections Java». (D'après lesIterator
spécifications.)la source
Les itérateurs sont rapides . c'est-à-dire que lorsqu'un thread modifie la collection par des opérations d'ajout / de suppression, tandis qu'un autre thread le traverse à travers un itérateur utilisant la
hasNext() or next()
méthode, l'itérateur échoue rapidement en lançantConcurrentModificationException
. Le comportement rapide des itérateurs ne peut être utilisé que pour détecter des bogues. Les énumérations retournées par les méthodes de classes telles que Hashtable, Vector ne sont pas rapides, ce qui est obtenu en synchronisant le bloc de code à l'intérieur de lanextElement()
méthode qui verrouille l'objet Vector actuel, ce qui coûte beaucoup de temps.la source
"Officiellement", ils sont censés être similaires avec l'interface de l'itérateur prenant en charge des opérations supplémentaires (par exemple, la suppression). Généralement, la tendance est d'utiliser des itérateurs.
Voici des javadocs de l'interface d'énumération :
la source
Un fait simple mais non mentionné dans les réponses précédentes est qu'il
Iterator<T>
est utilisé avecIterable<T>
pour servir à interpréter lafor(_type_ element:collection){...}
structure.la source
Il y a trois différences fondamentales dans l'énumération et l'itérateur
Enumération
1. il est utilisé uniquement pour la classe de latence (par exemple
Vector
)2. L'opération de lecture peut être effectuée, nous ne pouvons pas supprimer l'élément.
3. Deux méthodes sont disponibles
Itérateur
il s'applique à toutes les collections
L'opération de lecture et de suppression peut être effectuée
Trois méthodes sont disponibles
Limitation dans les deux
Add object
etReplace object
la source
Si vous écrivez votre propre classe de collection et que vous étendez l'une des classes existantes ou implémentez l'une des interfaces du framework Collections, vous n'avez fondamentalement pas d'autre choix que d'utiliser Iterator.
Si, pour une raison quelconque (à laquelle je ne pense pas), vous créez une classe de collection personnalisée qui ne se rapporte pas à java.util.Collection ou java.util.Map de quelque manière que ce soit, vous devez toujours implémenter Iterable afin que les gens puissent utiliser votre classe en boucle for.
la source
La principale différence est que l'énumération n'expose pas la méthode remove (). De plus, Iterator ne permet pas une navigation et une modification simultanées sur un objet sous-jacent. Ils ont un contrôle pour voir s'il y a des modifications simultanées ou plus, et nécessitent donc plus de traitement. Les performances d'énumération sont donc pratiquement 50% plus rapides que celles d'itérateur. Si nous n'avons besoin que de la navigation en ignorant une telle synchronisation, utilisez simplement Enumeration.
la source
1) La principale différence entre Iterator et Enumeration est la suppression de l'élément lors de la traversée de la collection. Iterator peut supprimer l'élément pendant le parcours de la collection car il dispose de la méthode remove (). L'énumération n'a pas de méthode remove ().
2) L'énumération est de nature à sécurité intégrée. Il ne lève pas ConcurrentModificationException si Collection est modifiée pendant la traversée. Iterator est par nature ultra-rapide. Il lève une exception ConcurrentModificationException si une collection est modifiée lors d'une itération autre que sa propre méthode remove ().
3) L'énumération est une interface héritée qui est utilisée pour parcourir Vector, Hashtable. Iterator n'est pas une interface héritée. Iterator peut être utilisé pour le parcours de HashMap, LinkedList, ArrayList, HashSet, TreeMap, TreeSet.
la source
L'énumération ne peut être utilisée que pour la classe héritée (Vector, Stack ...), tandis que Iterator peut être utilisé pour tous.
la source
L'itérateur et l'énumération sont utilisés pour récupérer les données, la différence est que l'énumération ne peut être utilisée que pour les classes héritées, c'est-à-dire vecteur / pile, tandis que les itérateurs peuvent être utilisés pour le reste. L'énumération peut également être utilisée pour l'ensemble de clés dans les cartes.
la source