Nabrajanje vs Iterator
Postoje mnoge podatkovne strukture koje djeluju kao zbirke u Javi, poput Vektora, tablica Hash i klasa koje implementiraju Java Collections Framework (tj. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap i LinkedHashSet). Brojni su načini iteriranja kroz pojedinačne elemente objekata u Javi. Java nudi dva sučelja za olakšavanje ovog zadatka. Enumeration i Iterator dva su sučelja koja se nalaze u paketu java.util koja pružaju funkciju za nabrajanje kroz sekvence ili objekte sa skupom stavki. Enumerator je predstavljen u JDK 1.0, a Iterator koji je uveden u JDK 1.2 gotovo duplicira funkcionalnost Enumeratora (unutar Okvira zbirki).
Što je popisivanje?
Nabrajanje je javno sučelje u Javi, uvedeno u JDK 1.0, koje pruža mogućnost nabrajanja kroz sekvence elemenata. Nalazi se pod paketom java.util. Kada objekt sučelja provodi Enumeration, taj objekt može generirati niz elemenata. Sučelje za nabrajanje ima dvije metode. Metoda hasMoreElements () testirat će sadrži li ovo nabrajanje više elemenata, a nextElement () vraća sljedeći element u nizu (ako je preostao još barem jedan). Drugim riječima, pozivanjem uzastopnog nextElement () programer može pristupiti pojedinačnim elementima u seriji. Na primjer, za ispis svih elemenata u Vector v1 pomoću Enumeratora može se koristiti sljedeći isječak koda.
Nabrajanje e = v1.elements ();
While (e.hasMoreLements ()) {
System.out.println (e.nextElement ());
}
Popisivač se također može koristiti za definiranje toka unosa u objekte SequenceInputStream.
Što je Iterator?
Iterator je javno sučelje u paketu Java.util, koje omogućuje iteraciju kroz elemente objekata zbirki koji implementiraju okvir Zbirke (poput ArrayList, LinkedList, itd.). To je uvedeno u JDK 1.2 i zamijenilo je Enumerator u okviru Java Collections Framework. Iterator ima tri metode. Metoda hasNext () ispituje postoje li preostali elementi u zbirci, a metoda next () vraća sljedeći element u nizu. Metoda remove () može se koristiti za uklanjanje trenutnog elementa iz osnovne zbirke. Na primjer, za ispis svih elemenata u Vector v1 pomoću Iteratora može se koristiti sljedeći isječak koda.
Iterator i = v1.elements ();
Dok (i.hasNext ()) {
System.out.println (e.next ());
}
Koja je razlika između Enumeration i Iterator?
Iako su Enumeration i Iterator dva sučelja koja se nalaze u paketu java.util, a koja omogućuju iteraciju / nabrajanje kroz elemente niza, oni imaju svoje razlike. Zapravo, Iterator, koji je uveden nakon Enumeracije, zamjenjuje Enumeration unutar okvira Java Collections. Za razliku od Enumeration, Iterator je siguran u kvaru. To znači da istodobne izmjene (osnovne zbirke) nisu dopuštene kada se koristi Iterator. To je vrlo korisno u okruženjima s više niti gdje uvijek postoji rizik od istodobnih izmjena. U slučaju istodobne modifikacije, objekt Iterator će baciti ConcurrentModificationException. Iterator ima kraća imena metoda u odnosu na Enumerator. Nadalje,iterator ima dodatnu funkcionalnost brisanja elemenata tijekom iteracije (što nije moguće pomoću Enumeratora). Dakle, ako postoji potreba za uklanjanjem elemenata iz zbirke, Iterator je jedina opcija koja se može uzeti u obzir.