Prefácio
No exemplo de código da análise do pool de conexões de banco de dados, você pode ver que Enumeration é usado para percorrer a coleção Vector. Posteriormente, procurei algumas informações para ver quais métodos podem ser usados para percorrer classes de coleção. Encontrei os seguintes exemplos na Internet de uso de Enumeração e Iterador para percorrer classes de coleção. No entanto, este exemplo mencionou que a enumeração é mais eficiente que o iterador. Na verdade, este não é o caso . O teste de tempo neste exemplo é muito unilateral porque a quantidade de dados é muito pequena. À medida que o número de dados aumenta, a eficiência entre os dois fica cada vez mais próxima, sem que a proporção de múltiplos apareça. Além disso, o Iterator agora é comumente usado para percorrer classes de coleção. Somente aqueles que declaram especificamente que Enumeration deve ser usado usarão esta classe para percorrer coleções.
Exemplo de código
Copie o código do código da seguinte forma:
pacote edu.sjtu.erplab.hash;
importar java.util.Enumeration;
importar java.util.Hashtable;
importar java.util.Iterator;
importar java.util.Map.Entry;
//Uma instância de hashtable de travessia
classe pública TraveseHashTable {
public static void main(String[] args) {
//Inicializa e cria hashtable
Hashtable<String, String> ht = new Hashtable<String, String>();
for (int i = 0; i < 10000; i++) {
ht.put("Chave=" + i, "Val=" + i);
}
// 1. Usar enumeração
início longo = System.currentTimeMillis();
Enumeration<String> en = ht.keys();//Use enumeração para obter a chave
while (pt.hasMoreElements()) {
pt.nextElement();
}
final longo = System.currentTimeMillis();
System.out.println("Custos das chaves de enumeração " + (fim - início)
+ "milissegundos");
// 2. Usar enumeração
iniciar = System.currentTimeMillis();
Enumeration<String> en2 = ht.elements();//Use enumeração para obter este par chave-valor
enquanto (en2.hasMoreElements()) {
en2.nextElement();
}
fim = System.currentTimeMillis();
System.out.println("Custos dos elementos de enumeração " + (fim - início)
+ "milissegundos");
// 3. Iterador
iniciar = System.currentTimeMillis();
Iterator<String> it = ht.keySet().iterator();//Use um iterador para obter esta chave
enquanto (it.hasNext()) {
it.next();
}
fim = System.currentTimeMillis();
System.out.println("Custos do conjunto de chaves do iterador" + (fim - início)
+ "milissegundos");
// 4. Iterador
iniciar = System.currentTimeMillis();
Iterator<Entry<String, String>> it2 = ht.entrySet().iterator();//Use um iterador para obter este par de valores-chave
enquanto (it2.hasNext()) {
it2.next();
}
fim = System.currentTimeMillis();
System.out.println("Custos do conjunto de entrada do iterador " + (fim - início)
+ "milissegundos");
}
}
Interface obsoleta: enumeração
A interface Enumeration foi introduzida no JDK 1.0 e é a melhor interface de saída de iteração. Quando Vector foi usado pela primeira vez (ArrayList agora é recomendado), a interface Enumeration foi usada para saída. Embora Enumeration seja uma classe antiga, a classe Enumeration foi expandida após JDK1.5 para adicionar aplicativos de operação genéricos.
Os métodos comumente usados da interface Enumeration incluem hasMoreElements() (para determinar se há um próximo valor) e nextElement() (para remover o elemento atual. As funções desses métodos são semelhantes ao Iterator, exceto que existe um método para). exclua dados no Iterator, mas esta interface não possui operação de exclusão.
Por que continuar a usar a interface Enumeration?
As interfaces Enumeration e Iterator têm funções semelhantes, e o Iterator tem mais funções que Enumeration, então por que usar Enumeration? Isso ocorre porque o desenvolvimento do Java já demorou muito e alguns sistemas ou métodos mais antigos em bibliotecas de classes ainda usam a interface Enumeration. Portanto, para compatibilidade, a Enumeração ainda precisa ser usada.
Subclasses comuns da interface List
As subclasses comumente usadas da interface List incluem ArrayList e Vector. As duas têm muitas semelhanças.