Vorwort
Im Codebeispiel der Datenbankverbindungspoolanalyse können Sie sehen, dass Enumeration zum Durchlaufen der Vector-Sammlung verwendet wird. Später habe ich nach Informationen gesucht, um zu sehen, welche Methoden zum Durchlaufen von Sammlungsklassen verwendet werden können. Im Internet habe ich die folgenden Beispiele für die Verwendung von Enumeration und Iterator zum Durchlaufen von Sammlungsklassen gefunden. In diesem Beispiel wurde jedoch erwähnt, dass die Aufzählung effizienter ist als der Iterator. Tatsächlich ist der Zeittest in diesem Beispiel zu einseitig, da die Datenmenge zu gering ist. Mit zunehmender Datenmenge wird die Effizienz zwischen den beiden immer näher, ohne dass das Verhältnis von Vielfachen auftritt. Darüber hinaus wird Iterator jetzt häufig zum Durchlaufen von Sammlungsklassen verwendet. Nur diejenigen, die ausdrücklich deklarieren, dass Enumeration verwendet werden muss, verwenden diese Klasse zum Durchlaufen von Sammlungen.
Codebeispiel
Kopieren Sie den Codecode wie folgt:
Paket edu.sjtu.erplab.hash;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map.Entry;
//Eine Traversal-Hashtable-Instanz
öffentliche Klasse TraveseHashTable {
public static void main(String[] args) {
//Hashtabelle initialisieren und erstellen
Hashtable<String, String> ht = new Hashtable<String, String>();
for (int i = 0; i < 10000; i++) {
ht.put("Key=" + i, "Val=" + i);
}
// 1. Aufzählung verwenden
langer Start = System.currentTimeMillis();
Enumeration<String> de = ht.keys();//Enumeration verwenden, um den Schlüssel zu erhalten
while (en.hasMoreElements()) {
de.nextElement();
}
long end = System.currentTimeMillis();
System.out.println("Aufzählungsschlüsselkosten " + (Ende - Start)
+ „Millisekunden“);
// 2. Aufzählung verwenden
start = System.currentTimeMillis();
Enumeration<String> en2 = ht.elements();//Verwenden Sie die Enumeration, um dieses Schlüssel-Wert-Paar abzurufen
while (en2.hasMoreElements()) {
de2.nextElement();
}
end = System.currentTimeMillis();
System.out.println("Kosten der Aufzählungselemente " + (Ende - Start)
+ „Millisekunden“);
// 3. Iterator
start = System.currentTimeMillis();
Iterator<String> it = ht.keySet().iterator();//Verwenden Sie einen Iterator, um diesen Schlüssel zu erhalten
while (it.hasNext()) {
it.next();
}
end = System.currentTimeMillis();
System.out.println("Iterator keySet cost " + (end - start)
+ „Millisekunden“);
// 4. Iterator
start = System.currentTimeMillis();
Iterator<Entry<String, String>> it2 = ht.entrySet().iterator();//Verwenden Sie einen Iterator, um dieses Schlüssel-Wert-Paar abzurufen
while (it2.hasNext()) {
it2.next();
}
end = System.currentTimeMillis();
System.out.println("Iterator-EntrySet-Kosten " + (Ende - Start)
+ „Millisekunden“);
}
}
Veraltete Schnittstelle: Enumeration
Die Enumeration-Schnittstelle wurde in JDK 1.0 eingeführt und ist die beste Iterationsausgabeschnittstelle. Als Vector zum ersten Mal verwendet wurde (ArrayList wird jetzt empfohlen), wurde die Enumeration-Schnittstelle für die Ausgabe verwendet. Obwohl Enumeration eine alte Klasse ist, wurde die Enumeration-Klasse nach JDK1.5 erweitert, um generische Operationsanwendungen hinzuzufügen.
Zu den häufig verwendeten Methoden der Enumeration-Schnittstelle gehören hasMoreElements() (um festzustellen, ob ein nächster Wert vorhanden ist) und nextElement() (um das aktuelle Element zu entfernen). Die Funktionen dieser Methoden ähneln denen von Iterator, außer dass es eine Methode dazu gibt Daten im Iterator löschen, diese Schnittstelle verfügt jedoch nicht über eine Löschfunktion.
Warum weiterhin die Enumeration-Schnittstelle verwenden?
Die Schnittstellen Enumeration und Iterator haben ähnliche Funktionen, und Iterator hat mehr Funktionen als Enumeration. Warum also Enumeration verwenden? Dies liegt daran, dass die Entwicklung von Java lange gedauert hat und einige ältere Systeme oder Methoden in Klassenbibliotheken immer noch die Enumeration-Schnittstelle verwenden. Aus Kompatibilitätsgründen muss daher immer noch Enumeration verwendet werden.
Gemeinsame Unterklassen der List-Schnittstelle
Zu den häufig verwendeten Unterklassen der List-Schnittstelle gehören ArrayList und Vector. Die beiden weisen viele Ähnlichkeiten auf.