Считается ли интерфейс Enumeration в Java устаревшим?

«Считается ли интерфейс Enumeration в Java устаревшим?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, интерфейс Enumeration считается устаревшим (legacy), но сохраняется для обратной совместимости. Вместо него следует использовать Iterator или Iterable.

Основные отличия и преимущества Iterator:

  • Поддерживает метод remove() для удаления элементов во время итерации.
  • Имеет более короткие и понятные имена методов (hasNext(), next()).
  • Является частью современной коллекционной фреймворк.

Пример замены:

// Устаревший подход с Enumeration
Vector<String> vector = new Vector<>();
Enumeration<String> en = vector.elements();
while (en.hasMoreElements()) {
    String element = en.nextElement();
}

// Современный подход с Iterator
List<String> list = new ArrayList<>();
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String element = it.next();
    it.remove(); // Enumeration не поддерживает удаление
}

// Самый современный подход: for-each или Stream API
for (String element : list) { /* ... */ }
list.stream().forEach(System.out::println);

Для новых проектов всегда используйте Iterator или конструкции for-each.