Rozdiel medzi enumeráciou a iterátorom

Rozdiel medzi enumeráciou a iterátorom
Rozdiel medzi enumeráciou a iterátorom

Video: Rozdiel medzi enumeráciou a iterátorom

Video: Rozdiel medzi enumeráciou a iterátorom
Video: Metafora a Metonymie 2024, November
Anonim

Vyčíslenie vs Iterátor

V Jave existuje veľa dátových štruktúr, ktoré fungujú ako kolekcie, ako sú vektory, hash tabuľky a triedy, ktoré implementujú Java Collections Framework (t. j. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap a LinkedHashSet). Existuje mnoho spôsobov, ako iterovať cez jednotlivé prvky objektov v Jave. Java poskytuje dve rozhrania na uľahčenie tejto úlohy. Enumerácia a Iterátor sú dve rozhrania nachádzajúce sa v balíku java.util, ktoré poskytujú funkcie na enumeráciu cez sekvencie alebo objekty so množinou položiek. Enumerátor bol zavedený v JDK 1.0 a Iterator, ktorý bol predstavený v JDK 1.2 virtuálne duplikuje funkčnosť Enumerátora (v rámci Collections Framework).

Čo je to enumerácia?

Enumeration je verejné rozhranie v Jave, zavedené v JDK 1.0, ktoré poskytuje možnosť enumerácie prostredníctvom sekvencií prvkov. Nachádza sa v balíku java.util. Keď je Enumeračné rozhranie implementované objektom, tento objekt môže generovať sekvenciu prvkov. Enumeračné rozhranie má dve metódy. Metóda hasMoreElements() otestuje, či tento enumerácia obsahuje viac prvkov a nextElement() vráti ďalší prvok v sekvencii (ak je k dispozícii ešte aspoň jeden). Inými slovami, postupným volaním nextElement() môže programátor pristupovať k jednotlivým prvkom v sérii. Ak chcete napríklad vytlačiť všetky prvky vo Vector v1 pomocou Enumerátora, môžete použiť nasledujúci útržok kódu.

Vyčíslenie e=v1.elements();

While(e.hasMoreLements()){

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

}

Enumerator možno použiť aj na definovanie toku vstupu do objektov SequenceInputStream.

Čo je Iterator?

Iterátor je verejné rozhranie v balíku Java.util, ktoré umožňuje iteráciu cez prvky objektov kolekcií, ktoré implementujú rámec kolekcií (ako sú ArrayList, LinkedList atď.). Toto bolo zavedené v JDK 1.2 a nahradilo Enumerator v rámci Java Collections Framework. Iterátor má tri metódy. Metóda hasNext() testuje, či v kolekcii zostávajú prvky a metóda next() vráti ďalší prvok v rade. Metódu remove() možno použiť na odstránenie aktuálneho prvku zo základnej kolekcie. Ak chcete napríklad vytlačiť všetky prvky vo Vector v1 pomocou Iteratora, môžete použiť nasledujúci útržok kódu.

Iterátor i=v1.elements();

While(i.hasNext()){

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

}

Aký je rozdiel medzi Enumeráciou a Iterátorom?

Hoci Enumeration a Iterator sú dve rozhrania nachádzajúce sa v balíku java.util, ktoré umožňujú iteráciu/enumeráciu cez prvky série, majú svoje rozdiely. V skutočnosti Iterator, ktorý bol predstavený po Enumerácii, nahrádza Enumeration v rámci Java Collections. Na rozdiel od Enumeration je Iterator bezpečný pri poruche. To znamená, že súbežné úpravy (v základnej kolekcii) nie sú povolené, keď sa používa Iterator. To je veľmi užitočné vo viacvláknových prostrediach, kde vždy existuje riziko súbežných úprav. V prípade súbežnej modifikácie, objekt Iterator vyvolá ConcurrentModificationException. Iterátor má v porovnaní s Enumerátorom kratšie názvy metód. Okrem toho má iterátor dodatočnú funkciu odstraňovania prvkov počas iterácie (čo nie je možné pomocou Enumerátora). Takže, ak je potrebné odstrániť prvky z kolekcie, Iterator je jediná možnosť, ktorá prichádza do úvahy.

Odporúča: