Предисловие
В примере кода анализа пула подключений к базе данных вы можете видеть, что перечисление используется для обхода коллекции Vector. Позже я поискал некоторую информацию, чтобы узнать, какие методы можно использовать для обхода классов коллекций. В Интернете я нашел следующие примеры использования Enumeration и Iterator для обхода классов коллекций. Однако в этом примере упоминалось, что Enumeration более эффективен, чем Iterator. На самом деле это не так . Проверка времени в этом примере слишком односторонняя, поскольку объем данных слишком мал. По мере увеличения количества данных эффективность между ними становится все ближе и ближе, без появления соотношения кратных значений. Более того, теперь Iterator обычно используется для обхода классов коллекций. Только те, кто специально заявляет, что необходимо использовать Enumeration, будут использовать этот класс для обхода коллекций.
Пример кода
Скопируйте код кода следующим образом:
пакет edu.sjtu.erplab.hash;
импортировать java.util.Enumeration;
импортировать java.util.Hashtable;
импортировать java.util.Iterator;
импортировать java.util.Map.Entry;
//Экземпляр хэш-таблицы обхода
общественный класс TraveseHashTable {
public static void main(String[] args) {
//Инициализируем и создаем хеш-таблицу
Hashtable<String, String> ht = новая Hashtable<String, String>();
для (int я = 0; я <10000; я++) {
ht.put("Key=" + i, "Val=" + i);
}
// 1. Использование перечисления
длинный старт = System.currentTimeMillis();
Enumeration<String> en = ht.keys();//Используем перечисление для получения ключа
в то время как (en.hasMoreElements()) {
en.nextElement();
}
длинный конец = System.currentTimeMillis();
System.out.println("Стоимость ключей перечисления " + (конец - начало)
+ "миллисекунды");
// 2. Использование перечисления
старт = System.currentTimeMillis();
Enumeration<String> en2 = ht.elements();//Используйте перечисление, чтобы получить эту пару ключ-значение
в то время как (en2.hasMoreElements()) {
en2.nextElement();
}
конец = System.currentTimeMillis();
System.out.println("Стоимость элементов перечисления " + (конец - начало)
+ "миллисекунды");
// 3. Итератор
старт = System.currentTimeMillis();
Iterator<String> it = ht.keySet().iterator();//Используйте итератор, чтобы получить этот ключ
в то время как (it.hasNext()) {
это.следующий();
}
конец = System.currentTimeMillis();
System.out.println("Итератор keySet стоит " + (конец - начало)
+ "миллисекунды");
// 4. Итератор
старт = System.currentTimeMillis();
Iterator<Entry<String, String>> it2 = ht.entrySet().iterator();//Используйте итератор, чтобы получить эту пару ключ-значение
в то время как (it2.hasNext()) {
it2.следующий();
}
конец = System.currentTimeMillis();
System.out.println("Стоимость набора записей итератора " + (конец - начало)
+ "миллисекунды");
}
}
Устаревший интерфейс: перечисление
Интерфейс Enumeration был представлен в JDK 1.0 и является лучшим интерфейсом вывода итерации. Когда Vector использовался впервые (теперь рекомендуется ArrayList), для вывода использовался интерфейс Enumeration. Хотя Enumeration является старым классом, после JDK1.5 класс Enumeration был расширен за счет добавления универсальных операционных приложений.
Обычно используемые методы интерфейса Enumeration включают hasMoreElements() (чтобы определить, существует ли следующее значение) и nextElement() (чтобы удалить текущий элемент). Функции этих методов аналогичны Iterator, за исключением того, что существует метод для удаления текущего элемента. удалить данные в итераторе, но этот интерфейс не поддерживает удаление.
Зачем продолжать использовать интерфейс перечисления?
Интерфейсы Enumeration и Iterator имеют схожие функции, а Iterator имеет больше функций, чем Enumeration, так зачем же использовать Enumeration? Это связано с тем, что разработка Java прошла уже давно, а некоторые старые системы или методы в библиотеках классов все еще используют интерфейс Enumeration. Поэтому для совместимости все еще необходимо использовать Enumeration.
Общие подклассы интерфейса List
Часто используемые подклассы интерфейса List включают ArrayList и Vector. Эти два класса имеют много общего. Их сравнение приведено ниже.