Nabrajanje vs Iterator
Postoje mnoge strukture podataka koje djeluju kao zbirke na Javi, poput Vektora, Hash tablica i klasa koje implementiraju Java Collections Framework (tj. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap i LinkedHashSet). Na Javi postoje brojni načini za iteraciju kroz pojedinačne elemente objekata. Java pruža dva sučelja za olakšavanje ovog zadatka. Nabrajanje i Iterator su dva od sučelja koja se nalaze u paketu java.util koja pružaju mogućnost nabrajanja nizova ili objekata pomoću skupa predmeta. Popis je uveden u JDK 1.0, a Iterator koji je uveden u JDK 1.2 gotovo duplicira funkcionalnost popisivača (u okviru zbirke).
Što je nabrajanje?
Popisivanje je javno sučelje na Javi, uvedeno u JDK 1.0, koje pruža mogućnost nabrajanja kroz nizove elemenata. Nalazi se pod paketom java.util. Kad se sučelje Popisa implementira objekt, taj objekt može generirati slijed elemenata. Sučelje za popisivanje ima dvije metode. Metoda hasMoreElements () će testirati sadrži li ovo nabrajanje više elemenata i nextElement () vraća sljedeći element u nizu (ako postoji najmanje još jedan). Drugim riječima, pozivanjem nextElement () uzastopno, programer može pristupiti pojedinačnim elementima u nizu. Na primjer, za ispis svih elemenata u Vector v1 pomoću Enumeratora, može se upotrijebiti sljedeći isječak koda.
Nabrajanje e = v1.elements ();
Dok (e.hasMoreLements ())
Sustava (e.nextElement ());
Popisivač se također može koristiti za definiranje struje ulaza u objekte SequenceInputStream.
Što je Iterator?
Iterator je javno sučelje u paketu Java.util koje omogućuje iteriranje kroz elemente zbirki koji implementiraju Framework Collection (poput ArrayList, LinkedList, itd.). To je uvedeno u JDK 1.2 i zamijenilo Popisivača u okviru Java Collection Collection. Iterator ima tri metode. Metoda hasNext () testira postoje li preostali elementi u kolekciji, a metoda next () vraća sljedeći element u nizu. Metoda remove () može se koristiti za uklanjanje trenutnog elementa iz kolekcije. Na primjer, za ispis svih elemenata u Vector v1 pomoću Iteratora može se upotrijebiti sljedeći isječak koda.
Iterator i = v1.elements ();
A (i.hasNext ())
Sustava (e.next ());
Koja je razlika između nabrajanja i iteratora?
Iako su Enumeration i Iterator dva sučelja koja se nalaze u paketu java.util koja omogućuju iteriranje / nabrajanje kroz elemente niza, oni imaju svoje razlike. Zapravo, Iterator, koji je uveden nakon popisivanja, zamjenjuje popis u okviru Java Collection zbirke. Za razliku od nabrajanja, Iterator nije siguran. To znači da istodobne modifikacije (dotične zbirke) nisu dopuštene kada se upotrebljava Iterator. Ovo je vrlo korisno u okruženjima s više navoja gdje uvijek postoji rizik od istodobnih modifikacija. U slučaju istodobne izmjene, objekt Iterator će izbaciti 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 kolekcije, Iterator je jedina opcija koja se može razmotriti.