Rozdíl mezi výčtem a iterátorem

Výčet vs Iterator

Existuje mnoho datových struktur, které fungují jako kolekce v Javě, jako jsou vektory, Hash tabulky a třídy, které implementují Java Collection Framework (tj. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap a LinkedHashSet). Existuje mnoho způsobů, jak iterovat jednotlivé prvky objektů v Javě. Java poskytuje dvě rozhraní pro usnadnění této úlohy. Výčet a Iterator jsou dvě rozhraní nalezená v balíčku java.util, které poskytují funkce pro výčet pomocí sekvencí nebo objektů se sadou položek. Enumerator byl představen v JDK 1.0 a Iterator, který byl představen v JDK 1.2, prakticky duplikuje funkčnost Enumerator (v rámci Framework Framework).

Co je výčet?

Výčet je veřejné rozhraní v Javě, zavedené v JDK 1.0, které poskytuje výčet prostřednictvím sekvencí prvků. Nachází se v balíčku java.util. Je-li rozhraní Enumeration implementováno objektem, tento objekt může vygenerovat sekvenci prvků. Rozhraní výčtu má dvě metody. Metoda hasMoreElements () otestuje, zda tento výčet obsahuje více prvků a nextElement () vrací další prvek v posloupnosti (pokud má být alespoň jeden další). Jinými slovy, postupným voláním nextElement () může programátor přistupovat k jednotlivým prvkům v řadě. Například pro tisk všech prvků v programu Vector v1 pomocí nástroje Enumerator lze použít následující fragment kódu.

Výčet e = v1.elements ();

Zatímco (e.hasMoreLements ())

System.out.println (e.nextElement ());

Enumerator lze také použít k definování proudu vstupu do objektů SequenceInputStream.

Co je Iterátor?

Iterator je veřejné rozhraní v balíčku Java.util, které umožňuje iteraci prostřednictvím prvků objektů kolekce, které implementují rámec Kolekce (jako je ArrayList, LinkedList atd.). Toto bylo představeno v JDK 1.2 a nahradilo Enumerator v rámci Java Collections Framework. Iterátor má tři metody. Metoda hasNext () testuje, zda v kolekci zbývají další prvky, a metoda next () vrací další prvek v řadě. Metodu remove () lze použít k odebrání aktuálního prvku ze základní kolekce. Například pro tisk všech prvků ve Vektoru v1 pomocí Iterátoru lze použít následující fragment kódu.

Iterátor i = v1.elements ();

Zatímco (i.hasNext ())

System.out.println (e.next ());

Jaký je rozdíl mezi Výčtem a Iterátorem?

Přestože Enumeration a Iterator jsou dvě rozhraní nalezená v balíčku java.util, které umožňují iteraci / výčet pomocí prvků řady, mají své rozdíly. Ve skutečnosti Iterator, který byl představen po výčtu, nahrazuje výčet v rámci Java Collection. Na rozdíl od Enumerace je Iterator bezpečný. To znamená, že souběžné úpravy (základní kolekce) nejsou při použití Iterátoru povoleny. To je velmi užitečné v prostředích s více vlákny, kde vždy existuje riziko současných úprav. V případě souběžné modifikace objekt Iterator vyvolá ConcurrentModificationException. Iterator má oproti metodě Enumerator kratší názvy metod. Kromě toho má iterátor dodatečnou funkci mazání prvků během iterace (což není možné pomocí enumerátoru). Takže, pokud je třeba odstranit prvky ze sbírky, je Iterator jedinou možností, kterou lze zvážit.