Разница между перечислением и итератором в Java

Разницу между 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».

Вот и все по этой простой, но важной теме.

Прокрутить вверх