Prefacio
En el ejemplo de código del análisis del grupo de conexiones de bases de datos, puede ver que la enumeración se utiliza para atravesar la colección de vectores. Más tarde, busqué información para ver qué métodos se pueden usar para atravesar clases de colección. Encontré los siguientes ejemplos en Internet sobre el uso de Enumeración e Iterador para atravesar clases de colección. Sin embargo, este ejemplo menciona que la enumeración es más eficiente que el iterador. De hecho, este no es el caso . La prueba de tiempo en este ejemplo es demasiado unilateral porque la cantidad de datos es demasiado pequeña. A medida que aumenta la cantidad de datos, la eficiencia entre los dos se acerca cada vez más, sin que aparezca la proporción de múltiplos. Además, Iterator ahora se usa comúnmente para atravesar clases de colección. Solo aquellos que declaran específicamente que se debe usar Enumeration usarán esta clase para atravesar colecciones.
Ejemplo de código
Copie el código de código de la siguiente manera:
paquete edu.sjtu.erplab.hash;
importar java.util.Enumeration;
importar java.util.Hashtable;
importar java.util.Iterator;
importar java.util.Map.Entry;
//Una instancia de tabla hash transversal
clase pública TraveseHashTable {
público estático vacío principal (String [] argumentos) {
//Inicializar y crear tabla hash
Hashtable<String, String> ht = new Hashtable<String, String>();
para (int i = 0; i < 10000; i++) {
ht.put("Clave=" + i, "Val=" + i);
}
// 1. Usar enumeración
inicio largo = System.currentTimeMillis();
Enumeration<String> en = ht.keys();//Usa la enumeración para obtener la clave
while (en.hasMoreElements()) {
es.nextElement();
}
extremo largo = System.currentTimeMillis();
System.out.println("Costos de las claves de enumeración" + (final - inicio)
+ " milisegundos");
// 2. Usar enumeración
inicio = System.currentTimeMillis();
Enumeration<String> en2 = ht.elements();//Utilice la enumeración para obtener este par clave-valor
mientras (en2.hasMoreElements()) {
en2.nextElement();
}
fin = System.currentTimeMillis();
System.out.println("Costos de los elementos de enumeración" + (fin - inicio)
+ " milisegundos");
// 3. Iterador
inicio = System.currentTimeMillis();
Iterator<String> it = ht.keySet().iterator();//Utiliza un iterador para obtener esta clave
mientras (it.hasNext()) {
it.siguiente();
}
fin = System.currentTimeMillis();
System.out.println("Costos del conjunto de claves del iterador" + (final - inicio)
+ " milisegundos");
// 4. Iterador
inicio = System.currentTimeMillis();
Iterator<Entry<String, String>> it2 = ht.entrySet().iterator();//Utilice un iterador para obtener este par clave-valor
mientras (it2.hasNext()) {
it2.siguiente();
}
fin = System.currentTimeMillis();
System.out.println("Entrada del iteradorEstablecer costos " + (fin - inicio)
+ " milisegundos");
}
}
Interfaz obsoleta: enumeración
La interfaz Enumeration se introdujo en JDK 1.0 y es la mejor interfaz de salida de iteración. Cuando se usó Vector por primera vez (ahora se recomienda ArrayList), se usó la interfaz Enumeration para la salida. Aunque Enumeration es una clase antigua, la clase Enumeration se amplió después de JDK1.5 para agregar aplicaciones de operación genéricas.
Los métodos comúnmente utilizados de la interfaz Enumeration incluyen hasMoreElements() (para determinar si hay un siguiente valor) y nextElement() (para eliminar el elemento actual). Las funciones de estos métodos son similares a Iterator, excepto que hay un método para. eliminar datos en Iterator, pero esta interfaz no tiene función de eliminación.
¿Por qué seguir utilizando la interfaz de Enumeración?
Las interfaces Enumeration e Iterator tienen funciones similares, y Iterator tiene más funciones que Enumeration, entonces, ¿por qué usar Enumeration? Esto se debe a que el desarrollo de Java ha pasado durante mucho tiempo y algunos sistemas o métodos más antiguos en las bibliotecas de clases todavía usan la interfaz Enumeration. Por lo tanto, por compatibilidad, aún es necesario utilizar Enumeration.
Subclases comunes de la interfaz List
Las subclases comúnmente utilizadas de la interfaz List incluyen ArrayList y Vector. Las dos tienen muchas similitudes. A continuación se ofrece una comparación entre las dos.