Jaka jest różnica między Iterator a Enumeration w Java?

W programowaniu w języku Java, zarówno Iterator jak i Enumeration są interfejsami używanymi do iteracji po kolekcjach danych, takich jak listy, zbiory czy tablice. Chociaż oba służą podobnemu celowi, istnieją między nimi kluczowe różnice dotyczące funkcjonalności i bezpieczeństwa.

Iterator

Interfejs Iterator został wprowadzony w Java 2 i jest bardziej elastyczny oraz bezpieczny w porównaniu do Enumeration. Pozwala na bezpieczne usuwanie elementów z kolekcji podczas iteracji, co jest dużą zaletą w przypadku potrzeby modyfikacji kolekcji w trakcie przeglądania jej elementów.

Enumeration

Z kolei Enumeration pojawił się wcześniej, w JDK 1.0. Jest mniej elastyczny niż Iterator, ponieważ nie oferuje metody do usuwania elementów. Jest używany głównie do modelowania iteracji w starych API, takich jak te w Vector czy Hashtable, które były popularne przed wprowadzeniem kolekcji w Java 2.

Przykład użycia Iterator i Enumeration

Poniżej przedstawiam przykład kodu, który ilustruje różnice w użyciu Iterator i Enumeration przy iteracji przez kolekcję typu Vector.

import java.util.Enumeration;
import java.util.Iterator;
import java.util.Vector;

public class CollectionDemo {
    public static void main(String[] args) {
        // Tworzenie wektora z elementami
        Vector<String> vector = new Vector<>();
        vector.add("Apple");
        vector.add("Banana");
        vector.add("Cherry");

        // Używanie Enumeration do wyświetlenia elementów
        Enumeration<String> enumeration = vector.elements();
        while (enumeration.hasMoreElements()) {
            String element = enumeration.nextElement();
            System.out.println("Element: " + element);
        }

        // Używanie Iterator do modyfikacji kolekcji
        Iterator<String> iterator = vector.iterator();
        while (iterator.hasNext()) {
            String element = iterator.next();
            if (element.equals("Banana")) {
                iterator.remove(); // Usuwanie elementu
            }
        }

        System.out.println("Vector after removal: " + vector);
    }
}

Podsumowanie

Iterator jest nowszym i bardziej zaawansowanym narzędziem do iteracji przez kolekcje w Java, oferującym większą elastyczność i bezpieczeństwo, głównie za sprawą możliwości modyfikacji kolekcji podczas iteracji. Enumeration choć starszy, nadal znajduje zastosowanie w legacy API. Współcześnie, jednak zaleca się używanie Iterator w nowych projektach ze względu na jego rozszerzone możliwości i większe bezpieczeństwo.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top