Sąrašas prieš iteratorių
Yra daug duomenų struktūrų, kurios veikia kaip rinkiniai Java sistemoje, pvz., vektoriai, maišos lentelės ir klasės, įgyvendinančios Java kolekcijų sistemą (t. y. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap ir LinkedHashSet). Yra daug būdų, kaip kartoti atskirus „Java“objektų elementus. „Java“suteikia dvi sąsajas, kad būtų lengviau atlikti šią užduotį. Enumeration ir Iterator yra dvi sąsajos, esančios java.util pakete, kurios suteikia funkcionalumą surašyti naudojant sekas arba objektus su elementų rinkiniu. Enumerator buvo pristatytas JDK 1.0 ir Iterator, kurie buvo pristatyti JDK 1.2 versijoje, iš esmės dubliuoja Enumerator funkcijas (kolekcijų sistemoje).
Kas yra surašymas?
Sąrašas yra viešoji Java sąsaja, įdiegta JDK 1.0 versijoje, kuri suteikia galimybę surašyti elementų sekas. Jį rasite java.util pakete. Kai surašymo sąsają įgyvendina objektas, tas objektas gali generuoti elementų seką. Surašymo sąsaja turi du būdus. Metodas hasMoreElements() patikrins, ar šiame sąraše yra daugiau elementų, o nextElement() grąžina kitą sekos elementą (jei yra dar bent vienas). Kitaip tariant, pakviesdamas nextElement() iš eilės, programuotojas gali pasiekti atskirus serijos elementus. Pavyzdžiui, norint spausdinti visus Vector v1 elementus naudojant Enumerator, galima naudoti šį kodo fragmentą.
Sąrašas e=v1.elements();
While(e.hasMoreLements()){
System.out.println(e.nextElement());
}
Enumerator taip pat gali būti naudojamas nustatant įvesties srautą į SequenceInputStream objektus.
Kas yra Iteratorius?
Iteratorius yra vieša Java.util paketo sąsaja, leidžianti kartoti kolekcijų objektų elementus, kurie įgyvendina kolekcijų sistemą (pvz., ArrayList, LinkedList ir kt.). Tai buvo įdiegta JDK 1.2 versijoje ir pakeitė „Java Collections Framework“sąrašą. Iteratorius turi tris metodus. Metodas hasNext() patikrina, ar kolekcijoje yra likusių elementų, o next() metodas grąžina kitą serijos elementą. Pašalinti () metodą galima naudoti norint pašalinti esamą elementą iš pagrindinės kolekcijos. Pavyzdžiui, norint spausdinti visus Vector v1 elementus naudojant Iteratorių, galima naudoti šį kodo fragmentą.
Iteratorius i=v1.elements();
While(i.hasNext()){
System.out.println(e.next());
}
Kuo skiriasi Enumeration ir Iterator?
Nors Enumeration ir Iterator yra dvi sąsajos, esančios java.util pakete, leidžiančios kartoti / išvardinti serijos elementus, tačiau jos turi savo skirtumų. Tiesą sakant, „Iterator“, kuris buvo pristatytas po „Enumeration“, „Java“kolekcijų sistemoje pakeičia sąrašą. Skirtingai nuo Enumeration, Iteratorius yra saugus nuo gedimų. Tai reiškia, kad naudojant „Iterator“neleidžiama vienu metu atlikti (pagrindinio rinkinio) modifikacijų. Tai labai naudinga kelių gijų aplinkoje, kur visada yra rizika atlikti tuo pačius pakeitimus. Tuo pačiu metu atliekamo modifikavimo atveju Iteratoriaus objektas išmes ConcurrentModificationException. „Iterator“turi trumpesnius metodų pavadinimus, palyginti su „Enumerator“. Be to, iteratorius turi papildomą elementų ištrynimo funkciją iteracijos metu (tai neįmanoma naudojant Enumerator). Taigi, jei reikia pašalinti elementus iš kolekcijos, Iteratorius yra vienintelė galimybė, kurią galima apsvarstyti.