¿Cuál es la diferencia exacta entre estas dos interfaces? ¿ Enumeration
Tiene beneficios sobre el uso Iterator
? Si alguien pudiera dar más detalles, se agradecería un artículo de referencia.
java
collections
iterator
enumeration
cometa
fuente
fuente
Respuestas:
En cuanto a la especificación de la API de Java para la
Iterator
interfaz, hay una explicación de las diferencias entreEnumeration
:La conclusión es que ambos
Enumeration
yIterator
darán elementos sucesivos, peroIterator
se ha mejorado de tal manera que los nombres de los métodos son más cortos y tienen unremove
método adicional . Aquí hay una comparación lado a lado:Como también se menciona en las Especificaciones de la API de Java, para los programas más nuevos, se
Iterator
debe preferirEnumeration
, ya que "Iterator toma el lugar de la enumeración en el marco de las colecciones de Java". (De lasIterator
especificaciones).fuente
Los iteradores son rápidos . es decir, cuando un hilo cambia la colección mediante operaciones de agregar / quitar, mientras que otro hilo lo atraviesa a través de un
hasNext() or next()
método Iterator using , el iterador falla rápidamente lanzandoConcurrentModificationException
. El comportamiento a prueba de fallas de los iteradores solo se puede utilizar para detectar errores. Las enumeraciones devueltas por los métodos de clases como Hashtable, Vector no son rápidas que se logran sincronizando el bloque de código dentro delnextElement()
método que bloquea el objeto Vector actual, lo que cuesta mucho tiempo.fuente
"Oficialmente", se supone que son similares con la interfaz del iterador que admite operaciones adicionales (por ejemplo, eliminación). Generalmente, la tendencia es utilizar iteradores.
Aquí es de la interfaz de enumeración javadocs :
fuente
Un hecho simple, pero que no he mencionado en respuestas anteriores, es que
Iterator<T>
se usa conIterable<T>
para servir en la interpretación de lafor(_type_ element:collection){...}
estructura.fuente
Hay tres diferencias básicas en enumeración e iterador
Enumeración
1. se usa solo para la clase heredada (p. Ej.
Vector
)2. Se puede realizar la operación de lectura, no podemos quitar el elemento.
3. Hay dos métodos disponibles
Iterador
es aplicable para todas las colecciones
Se puede realizar la operación de lectura y eliminación
Tres métodos están disponibles
Limitación en ambos
Add object
yReplace object
fuente
Si está escribiendo su propia clase de colección y está ampliando cualquiera de las clases existentes o implementando cualquiera de las interfaces del marco de Colecciones, básicamente no tiene más remedio que usar Iterator.
Si por alguna razón (que no puedo pensar) está creando una clase de colección personalizada que no se relaciona con java.util.Collection o java.util.Map de ninguna manera, aún debe implementar Iterable para que la gente pueda usar su clase en bucles for.
fuente
La principal diferencia es que la enumeración no expone el método remove (). Además, Iterator no permite una navegación y modificación simultáneas en un objeto subyacente. Tienen un control para ver si hay modificaciones simultáneas o algo así y, por lo tanto, requieren más procesamiento. Por tanto, el rendimiento de Enumeration es prácticamente un 50% más rápido que el de Iterator. Si solo necesitamos la navegación ignorando dicha sincronización, simplemente use Enumeration.
fuente
1) La principal diferencia entre Iterator y Enumeration es la eliminación del elemento mientras se recorre la colección. El iterador puede eliminar el elemento durante el recorrido de la colección, ya que tiene el método remove (). La enumeración no tiene el método remove ().
2) La enumeración es de naturaleza a prueba de fallas. No lanza ConcurrentModificationException si Collection se modifica durante el recorrido. El iterador es de naturaleza rápida. Lanza ConcurrentModificationException si se modifica una colección mientras se itera en otro método que no sea remove ().
3) La enumeración es una interfaz heredada que se utiliza para atravesar Vector, Hashtable. Iterator no es una interfaz heredada. Iterator se puede utilizar para recorrer HashMap, LinkedList, ArrayList, HashSet, TreeMap, TreeSet.
fuente
La enumeración se puede usar solo para la clase heredada (Vector, Stack ...), mientras que Iterator se puede usar para todas.
fuente
Tanto el iterador como la enumeración se usan para recuperar los datos, la diferencia es que la enumeración se puede usar solo para clases heredadas, es decir, vector / pila, mientras que los iteradores se pueden usar para el resto. La enumeración también se puede utilizar para el conjunto de claves en mapas.
fuente