Разницу между Enumerator и Iterator вам могут спросить на любом собеседовании по Java. В этом посте я перечисляю несколько различий, которые вы можете упомянуть, отвечая на вопрос.
1. Перечисление
Перечисление помогает перечислять элементы вектора, ключи хеш-таблицы и значения в хеш-таблице. Последовательные вызовы метода nextElement() возвращают последовательные элементы коллекции.
Использование перечисления больше не рекомендуется.
Vector<String> vector = new Vector<>();vector.add("A");vector.add("B");vector.add("C");while(vector.hasMoreElements()) {System.out.println(vector.nextElement());}
2. Итератор
Iterator — рекомендуемый способ итерации по коллекциям с Java 1.2, который заменяет Enumeration. Обратите внимание, что Enumeration можно преобразовать в Iterator с помощью метода Enumeration.asIterator().
ArrayList<String> list = new ArrayList<>();list.add("A");list.add("B");list.add("C");Iterator<String> itr = list.iterator();while(itr.hasNext()){System.out.println(it.next());}
3. Разница между перечислением и итератором
Прежде всего, перечисления применимы только для устаревших классов, например Hashtable и Vector. Перечисления были частью первоначального выпуска Java JDK1.0. В то время как итераторы были включены в JDK 1.2 вместе с фреймворком Collections, который также был добавлен только в JDK 1.2.
Итак, очевидно, что итераторы были разработаны как полностью ориентированные только на фреймворк коллекций. Если вы прочтете документацию java итератора, то там четко указано его предназначение. Цитата с официального сайта Oracle:
Итератор над коллекцией. Итератор занимает место Enumeration в Java Collections Framework. Итераторы отличаются от перечислений двумя способами:
- Итераторы позволяют вызывающему объекту удалять элементы из базовой коллекции во время итерации с четко определенной семантикой.
- Названия методов были улучшены.
Интерфейс Iterator является членом Java Collections Framework.
Суть в том, что и Enumeration, и Iterator будут возвращать последовательные элементы, но Iterator улучшен таким образом, что имена методов стали короче, и имеет дополнительный метод remove().
Вот наглядное сравнение:
Перечисление | Итератор |
---|---|
hasMoreElement() | hasNext() |
следующийЭлемент() | следующий() |
Н/Д | удалять() |
Спецификации API Java рекомендуют для новых программ отдавать предпочтение итератору, а не перечислению, поскольку «итератор занимает место перечисления в структуре коллекций Java».
Вот и все по этой простой, но важной теме.