Перечисление и итератор
Существует множество структур данных, которые действуют как коллекции в Java, такие как векторы, хеш-таблицы и классы, которые реализуют платформу коллекций Java (например, HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap и LinkedHashSet). Существует множество способов перебора отдельных элементов объектов в Java. Java предоставляет два интерфейса для облегчения этой задачи. Перечисление и Итератор - это два интерфейса из пакета java.util, которые обеспечивают функциональность для перечисления последовательностей или объектов с набором элементов. Перечислитель был представлен в JDK 1.0 и Iterator, который был представлен в JDK 1.2, практически дублирует функциональность Enumerator (в рамках Collections Framework).
Что такое перечисление?
Enumeration - это общедоступный интерфейс в Java, представленный в JDK 1.0, который обеспечивает возможность перечисления последовательностей элементов. Он находится в пакете java.util. Когда интерфейс Enumeration реализуется объектом, этот объект может генерировать последовательность элементов. Интерфейс перечисления имеет два метода. Метод hasMoreElements() проверит, содержит ли это перечисление больше элементов, а nextElement() возвращает следующий элемент в последовательности (если есть еще хотя бы один элемент). Другими словами, последовательно вызывая nextElement(), программист может получить доступ к отдельным элементам в серии. Например, чтобы напечатать все элементы в Vector v1 с помощью Enumerator, можно использовать следующий фрагмент кода.
Перечисление e=v1.elements();
While(e.hasMoreLements()){
System.out.println(e.nextElement());
}
Энумератор также можно использовать для определения потока ввода в объекты SequenceInputStream.
Что такое итератор?
Iterator - это общедоступный интерфейс в пакете Java.util, который позволяет перебирать элементы объектов коллекций, реализующих платформу коллекций (например, ArrayList, LinkedList и т. д.). Это было введено в JDK 1.2 и заменило Enumerator в Java Collections Framework. Iterator имеет три метода. Метод hasNext() проверяет, остались ли элементы в коллекции, а метод next() возвращает следующий элемент в серии. Метод remove() можно использовать для удаления текущего элемента из базовой коллекции. Например, чтобы напечатать все элементы в Vector v1 с помощью Iterator, можно использовать следующий фрагмент кода.
Итератор i=v1.elements();
While(i.hasNext()){
System.out.println(e.next());
}
В чем разница между Enumeration и Iterator?
Несмотря на то, что перечисление и итератор - это два интерфейса из пакета java.util, которые позволяют выполнять итерацию/перечисление элементов серии, они имеют свои отличия. На самом деле Iterator, который был представлен после Enumeration, заменяет Enumeration в рамках Java Collections framework. В отличие от Enumeration, Iterator отказоустойчив. Это означает, что одновременные модификации (базовой коллекции) не допускаются при использовании Iterator. Это очень полезно в многопоточных средах, где всегда существует риск одновременных изменений. В случае одновременной модификации объект Iterator вызовет исключение ConcurrentModificationException. Iterator имеет более короткие имена методов по сравнению с Enumerator. Кроме того, итератор имеет дополнительную функцию удаления элементов во время итерации (что невозможно при использовании Enumerator). Итак, если есть необходимость удалить элементы из коллекции, Итератор - единственный вариант, который можно рассмотреть.