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

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

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

Video: Rozdíl mezi výčtem a iterátorem
Video: ALLEGORY - Definition + Examples 🐖 2024, Červenec
Anonim

Výčet vs Iterátor

V Javě existuje mnoho datových struktur, které fungují jako kolekce, jako jsou Vectors, Hash tabulky a třídy, které implementují Java Collections 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í tohoto úkolu. Enumeration a Iterator jsou dvě rozhraní nalezená v balíku java.util, která poskytují funkce pro výčet sekvencí nebo objektů se sadou položek. Enumerator byl zaveden v JDK 1.0 a Iterator, které byly představeny v JDK 1.2, virtuálně duplikují funkčnost Enumerátoru (v rámci Collections Framework).

Co je výčet?

Enumeration je veřejné rozhraní v Javě, představené v JDK 1.0, které poskytuje možnost výčtu sekvencí prvků. Nachází se v balíčku java.util. Když je rozhraní Enumeration implementováno objektem, může tento objekt generovat sekvenci prvků. Enumerační rozhraní má dvě metody. Metoda hasMoreElements() otestuje, zda tento výčet obsahuje více prvků a nextElement() vrátí další prvek v sekvenci (pokud zbývá 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ů ve Vector v1 pomocí Enumeratoru lze použít následující fragment kódu.

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

While(e.hasMoreLements()){

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

}

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

Co je Iterator?

Iterátor je veřejné rozhraní v balíku Java.util, které umožňuje iteraci přes prvky objektů kolekcí, které implementují rámec kolekcí (jako je ArrayList, LinkedList atd.). To 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 jsou v kolekci zbývající prvky, a metoda next() vrátí další prvek v řadě. Metodu remove() lze použít k odstranění aktuálního prvku ze základní kolekce. Například pro tisk všech prvků ve Vector v1 pomocí Iteratoru lze použít následující fragment kódu.

Iterátor i=v1.elements();

While(i.hasNext()){

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

}

Jaký je rozdíl mezi Enumerací a Iterátorem?

Přestože Enumeration a Iterator jsou dvě rozhraní nalezená v balíčku java.util, která umožňují iteraci/výčet prvků série, mají své rozdíly. Ve skutečnosti Iterator, který byl představen po Enumeration, nahrazuje Enumeration v rámci Java Collections. Na rozdíl od Enumeration je Iterator bezpečný při selhání. To znamená, že souběžné úpravy (v podkladové kolekci) 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 souběžných úprav. V případě souběžné úpravy objekt Iterator vyvolá výjimku ConcurrentModificationException. Iterátor má kratší názvy metod ve srovnání s Enumerátorem. Iterátor má navíc další funkcionalitu mazání prvků během iterace (což není možné pomocí Enumerátoru). Takže pokud je potřeba odstranit prvky z kolekce, Iterator je jediná možnost, kterou lze zvážit.

Doporučuje: