Wyliczenie a Iterator
Istnieje wiele struktur danych, które działają jako kolekcje w Javie, takie jak wektory, tabele Hash i klasy, które implementują strukturę kolekcji Java (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, które ułatwiają to zadanie. Enumeration i Iterator to dwa interfejsy znajdujące się w pakiecie java.util, które zapewniają funkcjonalność wyliczania poprzez sekwencje lub obiekty z zestawem elementów. Enumerator został wprowadzony w JDK 1.0, a Iterator, który został wprowadzony w JDK 1.2 praktycznie powiela funkcjonalność modułu Enumerator (w ramach Collections Framework).
Co to jest wyliczenie?
Enumeration to publiczny interfejs w Javie, wprowadzony w JDK 1.0, który zapewnia możliwość wyliczania poprzez sekwencje elementów. Znajduje się w pakiecie java.util. Gdy interfejs Enumeration jest implementowany przez obiekt, ten obiekt może generować sekwencję elementów. Interfejs wyliczenia ma dwie metody. Metoda hasMoreElements () sprawdzi, czy to wyliczenie zawiera więcej elementów, a nextElement () zwraca następny element w sekwencji (jeśli jest jeszcze co najmniej jeden). Innymi słowy, wywołując kolejno metodę nextElement (), programista może uzyskać dostęp do poszczególnych elementów w serii. Na przykład, aby wydrukować wszystkie elementy w Vector v1 przy użyciu modułu Enumerator, można użyć następującego fragmentu kodu.
Wyliczenie e = v1.elements ();
While (e.hasMoreLements ()) {
System.out.println (e.nextElement ());
}
Enumerator może również służyć do definiowania strumienia danych wejściowych do obiektów SequenceInputStream.
Co to jest Iterator?
Iterator to publiczny interfejs w pakiecie Java.util, który umożliwia iterowanie przez elementy obiektów kolekcji, które implementują strukturę kolekcji (takie jak ArrayList, LinkedList itp.). Zostało to wprowadzone w JDK 1.2 i zastąpiło moduł wyliczający w ramach Java Collections Framework. Iterator ma trzy metody. Metoda hasNext () sprawdza, czy w kolekcji są pozostałe elementy, a metoda next () zwraca następny element z serii. Metoda remove () może służyć do usuwania bieżącego elementu z kolekcji źródłowej. Na przykład, aby wydrukować wszystkie elementy w Vector v1 za pomocą Iteratora, można użyć następującego fragmentu kodu.
Iterator i = v1.elements ();
While (i.hasNext ()) {
System.out.println (e.next ());
}
Jaka jest różnica między wyliczeniem a iteratorem?
Chociaż Enumeration i Iterator to dwa interfejsy znalezione w pakiecie java.util, które pozwalają na iterację / wyliczanie elementów serii, mają one swoje różnice. W rzeczywistości Iterator, który został wprowadzony po wyliczeniu, zastępuje wyliczenie w ramach kolekcji Java. W przeciwieństwie do wyliczania, Iterator jest odporny na awarie. Oznacza to, że współbieżne 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 Enumerator. Ponadto,iterator posiada dodatkową funkcjonalność usuwania elementów podczas iteracji (co nie jest możliwe przy użyciu Enumeratora). Tak więc, jeśli istnieje potrzeba usunięcia elementów z kolekcji, jedyną opcją, którą można rozważyć, jest Iterator.