Výpočet vs Iterátor
Existuje veľa dátových štruktúr, ktoré v Jave fungujú ako kolekcie, ako sú vektory, tabuľky Hash a triedy, ktoré implementujú framework Java Collections (napr. 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, ktoré uľahčujú túto úlohu. Výpočet a Iterátor sú dve z rozhraní nájdených v balíku java.util, ktoré poskytujú funkcie na výčet sekvencií alebo objektov so sadou položiek. Enumerátor bol predstavený v JDK 1.0 a Iterator, ktorý bol predstavený v JDK 1.2, prakticky duplikuje funkčnosť Enumerátora (v rámci kolekcií).
Čo je to enumerácia?
Výpočet je verejné rozhranie v Jave predstavené v JDK 1.0, ktoré poskytuje možnosť výčtu prostredníctvom sekvencií prvkov. Nachádza sa pod balíkom java.util. Keď je rozhranie Enumeration implementované objektom, tento objekt môže generovať postupnosť prvkov. Rozpočtové rozhranie má dve metódy. Metóda hasMoreElements () otestuje, či tento výčet obsahuje viac prvkov a nextElement () vráti nasledujúci prvok v poradí (ak je k dispozícii ešte aspoň jeden). Inými slovami, postupným volaním nextElement () môže programátor získať prístup k jednotlivým prvkom v sérii. Napríklad na tlač všetkých prvkov vo vektore v1 pomocou Enumerátoru je možné použiť nasledujúci útržok kódu.
Výpočet e = v1.elements ();
While (e.hasMoreLements ()) {
System.out.println (e.nextElement ());
}
Enumerátor sa dá použiť aj na definovanie toku vstupu do objektov SequenceInputStream.
Čo je to Iterátor?
Iterator je verejné rozhranie v balíku Java.util, ktoré umožňuje iteráciu cez prvky objektov kolekcií, ktoré implementujú rámec kolekcií (napríklad ArrayList, LinkedList atď.). To bolo predstavené 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 () vracia ďalší prvok v rade. Metódu remove () je možné použiť na odstránenie aktuálneho prvku z podkladovej kolekcie. Napríklad na tlač všetkých prvkov vo vektore v1 pomocou Iterátora je možné 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?
Aj keď sú Enumeration a Iterator dve z rozhraní nájdených v balíku java.util, ktoré umožňujú iteráciu / výčet prostredníctvom prvkov série, majú svoje rozdiely. V skutočnosti Iterator, ktorý bol predstavený po Enumerácii, nahrádza Enumeráciu v rámci zbierok Java. Na rozdiel od výčtu je Iterator bezpečný proti zlyhaniu. To znamená, že súbežné úpravy (podkladovej kolekcie) nie sú povolené, keď sa používa Iterator. To je veľmi užitočné v prostrediach s viacerými vláknami, kde vždy existuje riziko súbežných úprav. V prípade súbežnej úpravy objekt Iterator vyvolá ConcurrentModificationException. Iterátor má v porovnaní s programom Enumerator kratšie názvy metód. Ďalejiterátor má ďalšiu funkcionalitu mazania prvkov počas iterácie (čo nie je možné pomocou programu Enumerator). Takže ak je potrebné odstrániť prvky zo zbierky, Iterator je jediná možnosť, o ktorej je možné uvažovať.