Wyliczenie vs Iterator
Istnieje wiele struktur danych, które działają w Javie jako kolekcje, takich jak wektory, tabele skrótów i klasy, które implementują środowisko Java Collections Framework (tj. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap i LinkedHashSet). Istnieje wiele sposobów na iterację poszczególnych elementów obiektów w Javie. Java udostępnia dwa interfejsy, aby ułatwić to zadanie. Enumeration i Iterator to dwa interfejsy znajdujące się w pakiecie java.util, które zapewniają funkcjonalność do wyliczania poprzez sekwencje lub obiekty z zestawem elementów. Moduł wyliczający został wprowadzony w JDK 1.0, a program Iterator, który został wprowadzony w JDK 1.2, praktycznie powiela funkcjonalność modułu wyliczającego (w ramach kolekcji).
Co to jest wyliczenie?
Wyliczanie to publiczny interfejs w Javie, wprowadzony w JDK 1.0, który zapewnia możliwość wyliczania poprzez sekwencje elementów. Można go znaleźć pod pakietem java.util. Gdy interfejs wyliczania jest implementowany przez obiekt, obiekt ten może generować sekwencję elementów. Interfejs wyliczania ma dwie metody. Metoda hasMoreElements () sprawdzi, czy to wyliczenie zawiera więcej elementów, a nextElement () zwróci następny element w sekwencji (jeśli jest jeszcze co najmniej jeden do przejścia). Innymi słowy, wywołując kolejno nextElement (), programista może uzyskać dostęp do poszczególnych elementów w serii. Na przykład, aby wydrukować wszystkie elementy w Vector v1 za pomocą Enumeratora, można użyć następującego fragmentu kodu.
Wyliczenie e = v1.elements ();
Chociaż (e.hasMoreLements ())
System.out.println (e.nextElement ());
Moduł wyliczający może również służyć do definiowania strumienia danych wejściowych do obiektów SequenceInputStream.
Co to jest Iterator?
Iterator to interfejs publiczny w pakiecie Java.util, który pozwala na iterację elementów obiektów kolekcji, które implementują środowisko Kolekcje (takich jak ArrayList, LinkedList itp.). Zostało to wprowadzone w JDK 1.2 i zastąpiło Enumerator w ramach Java Collections Framework. Iterator ma trzy metody. Metoda hasNext () sprawdza, czy w kolekcji znajdują się pozostałe elementy, a metoda next () zwraca następny element w serii. Metody remove () można użyć do usunięcia bieżącego elementu z podstawowej kolekcji. Na przykład, aby wydrukować wszystkie elementy w Vector v1 przy użyciu Iteratora, można użyć następującego fragmentu kodu.
Iterator i = v1.elements ();
Chociaż (i.hasNext ())
System.out.println (e.next ());
Jaka jest różnica między wyliczeniem a iteratorem?
Chociaż Enumeration i Iterator to dwa interfejsy znajdujące się w pakiecie java.util, które pozwalają na iterację / wyliczanie elementów serii, różnią się między sobą. W rzeczywistości Iterator, który został wprowadzony po wyliczeniu, zastępuje wyliczanie w ramach kolekcji Java. W przeciwieństwie do wyliczania, Iterator jest bezpieczny w razie awarii. Oznacza to, że jednoczesne modyfikacje (do podstawowej kolekcji) nie są dozwolone, gdy używany jest Iterator. Jest to bardzo przydatne w środowiskach wielowątkowych, w których zawsze istnieje ryzyko jednoczesnych modyfikacji. W przypadku jednoczesnej modyfikacji obiekt Iterator zgłosi wyjątek ConcurrentModificationException. Iterator ma krótsze nazwy metod w porównaniu do Enumeratora. Ponadto iterator ma dodatkową funkcję usuwania elementów podczas iteracji (co nie jest możliwe przy użyciu modułu wyliczającego). Jeśli więc istnieje potrzeba usunięcia elementów z kolekcji, Iterator jest jedyną opcją, którą można rozważyć.