¿Cuál es la diferencia exacta entre estas dos interfaces? ¿Enumeración Tienen ventajas sobre el uso de Iterator? Si alguien pudiera elaborar un artículo de referencia se agradece.

  • He utilizado una búsqueda en google y el primer resultado fue un interesante debate en JavaRanch acerca de Enumeración vs Iterador
InformationsquelleAutor cometta | 2009-06-04

9 Comentarios

  1. 137

    Mirando la API de Java Especificación para la Iterator de la interfaz, hay una explicación de las diferencias entre Enumeración:

    Iteradores difieren de
    las enumeraciones de dos maneras:

    • Iteradores permitir que la persona a eliminar elementos de la subyacente
      colección durante la iteración con
      bien-semántica definida.
    • Método nombres han sido mejorados.

    La línea de fondo es, tanto Enumeration y Iterator dará a los sucesivos elementos, pero Iterator se ha mejorado de tal manera que los nombres de método son más cortos, y tiene un adicional de remove método. Aquí está una lado a lado la comparación:

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

    Como también se menciona en el API de Java Especificaciones, para nuevos programas, Iterator debe ser preferido sobre Enumeration, como «Iterador toma el lugar de la Enumeración en el Java framework de colecciones.» (A partir de la Iterator especificaciones.)

    • Creo que hay un poco de explicación de la falta de esta respuesta con respecto a la concurrencia.
    • Las ediciones no debe ser la adición de un nuevo significado para el post, que es lo que los comentarios son para.
    • Está usted seguro de que «las Enumeraciones son típicamente más rápido» ? ya que la Enumeración tiene «sincronización de bloque de código dentro de la nextElement ()», Y que no tiene Sincronización en los Iteradores que hace que ConcurrentModificationException rit?? Cómo llamamos a los Iteradores son típicamente más rápido y las Enumeraciones son un poco más seguros. ??
    • Gracias por señalarlo. (Yo no me di cuenta de que la discusión adicional se añadió a esta respuesta.) Me ha deshecho la edición, ya que no era del todo exacta.
    • Creo que vale la pena señalar que eliminar() es un método opcional en el Iterador de la interfaz y un buen montón de ejecución de clases no implementarlo.
    • «Los nombres de método se han mejorado.» – Gracias por ser honesto 😉
    • por favor, añadir «fail-rápido» explicación también a esta respuesta!
    • sólo me preguntaba por qué enumeración no tiene método de quitar?

  2. 35

    Iteradores son fallar rápido . es decir, cuando un hilo de los cambios de la colección de agregar /quitar operaciones , mientras que el otro hilo se atraviesa a través de un Iterador utilizando hasNext() or next() método, el iterador de la falla rápidamente lanzando ConcurrentModificationException . El fail-rápida el comportamiento de los iteradores sólo puede ser utilizado para detectar errores. Las Enumeraciones devuelto por los métodos de las clases como Hashtable, Vector, no fallar rápido, lo que se logra mediante la sincronización del bloque de código dentro de la nextElement() método que bloquea la corriente, el Vector objeto que cuesta un montón de tiempo.

    • Sólo es parcialmente cierta: este comportamiento no está definido en la interfaz, es la implementación del Iterador. Es cierto que el ‘viejo’ de la colección de implementaciones en java.util (HashSet, ArrayList, etc.) presentan este comportamiento. Sin embargo, el nuevo ‘concurrente’ colecciones nunca va a lanzar una ConcurrentModificationException, que atraviesan la colección a partir del momento de la creación del iterador. Otras implementaciones pueden mostrar todavía un comportamiento diferente.
    • También vale la pena señalar: «tenga en cuenta que no-fast comportamiento no puede ser garantizada como es, generalmente hablando, imposible hacer cualquier duro garantías en la presencia de desincronización concurrente de modificación. Fail-operaciones rápidas tirar ConcurrentModificationException en base al mejor esfuerzo. Por lo tanto, sería incorrecto escribir un programa que dependían de esta excepción para su corrección: ConcurrentModificationException sólo debe ser utilizado para detectar errores.» docs.oracle.com/javase/7/docs/api/java/util/…
  3. 11

    «Oficialmente», que se supone que son similares con el iterador de la interfaz de apoyo adicional de las operaciones (por ejemplo, eliminación). En general, la tendencia es el uso de iteradores.

    Aquí es de la interfaz de enumeración javadocs:

    NOTA: La funcionalidad de esta interfaz es implementada por los
    Iterador de la interfaz. Además,
    Iterador añade un opcional quitar
    operación, y tiene más cortos método
    nombres. Las nuevas implementaciones deben
    considere el uso de Iterador en preferencia
    a la Enumeración.

  4. 6

    De un hecho simple pero no he mencionado en anteriores respuestas es que Iterator<T> se utiliza con Iterable<T> para servir en la interpretación de for(_type_ element:collection){...} estructura.

  5. 5

    Básica con tres de diferencia en la Enumeración y el Iterador

    Enumeración

    1. es el uso de sólo lagacy de la clase(por ejemplo. Vector)

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

    2. La operación de lectura se puede realizar, no podemos eliminar elemento.

    3. Dos Método están disponibles

    • public boolean hasNextElement();
    • Objeto público nextElement();

    Iterador

    1. es aplicable para todos los de la Colección de

      Iterator itr = c.iterator();  
      where c is any `Collection` class
    2. Leer y operación de eliminación se puede realizar

    3. De los tres métodos están disponibles

      • public boolean hasNext();
      • Objeto público next();
      • public void remove();

    Limition en tanto

    • Moverse sólo hacia adelante
    • No hay ningún tipo de métodos para Add object y Replace object
  6. 2

    Si usted está escribiendo su propia clase de colección, y estás ampliando cualquiera de las clases existentes o la implementación de cualquiera de los framework de Colecciones de interfaces, que, básicamente, no tienen más remedio que usar el Iterador.

    Si por alguna razón (que no creo) va a crear una colección personalizada de la clase que no se relacionan con java.util.Colección o java.util.Mapa de cualquier manera, usted debe todavía implementar Iterable así que la gente puede utilizar su clase en bucles.

  7. 2

    De las principales es la Enumeración de no exponer método remove (). Por otra parte, Iterador, no permita simultáneamente la navegación y la modificación en un objeto subyacente. Tienen un control para ver si hay modificaciones simultáneas o así, y por lo tanto tarda más en el procesamiento. Así que la Enumeración del rendimiento es prácticamente el 50% más rápido que el Iterador. Si sólo necesitamos de navegación ignorando tal sincronización, sólo tiene que utilizar la Enumeración.

    • Es cierto que la Enumeración de «no» exponer el método remove () -, pero también no prestar atención a la invocación de la Colección de remove() de la api. Para el ejemplo de código siguiente se acaba de impresión: AAA, CCC, EEE. —————————————————– Vector<Cadena> v=new Vector<Cadena>(6); v. add(«AAA»); v. add(«BBB»); v. add(«CCC»); v. add(«DDD»); v. add(«EEE»); v. add(«FFF»); Enumeración<Cadena> en = v. elementos(); while(es.hasMoreElements()) Cadena de valor=(String) es.nextElement(); System.a cabo.println(valor); v. quitar(valor);
  8. 0

    Enumeración puede ser utilizado sólo para el legado de la clase(Vector, Pila…), mientras que el Iterador puede ser utilizado para todo.

  9. -1

    Tanto iterador y la enumeración se utiliza para recuperar los datos, la diferencia es que la enumeración puede ser utilizado sólo para el legado de las clases i.e vector/pila mientras que los iteradores pueden ser utilizados para el resto. La enumeración puede ser utilizado también para el conjunto de claves en google maps.

    • Donde le hicieron ver que se puede utilizar la Enumeración de los conjuntos fundamentales de Mapa??

Dejar respuesta

Please enter your comment!
Please enter your name here