Apskaita prieš iteratorių
Yra daug duomenų struktūrų, kurios veikia kaip „Java“kolekcijos, pvz., „Vektoriai“, „Hash“lentelės ir klasės, diegiančios „Java Collections Framework“(pvz., „HashMap“, „HashSet“, „ArrayList“, „TreeSet“, „TreeMap“, „LinkedList“, „LinkedHashMap“ir „LinkedHashSet“). Yra daugybė būdų, kaip kartoti atskirus „Java“objektų elementus. „Java“suteikia dvi sąsajas, kad būtų lengviau atlikti šią užduotį. Surašymas ir „Iterator“yra dvi iš „java.util“pakete esančių sąsajų, suteikiančios funkcijų, kad būtų galima išvardyti sekas arba objektus su elementų rinkiniu. Surašytojas buvo pristatytas JDK 1.0, o „Iterator“, pristatytas JDK 1.2, praktiškai dubliuoja Surašytojo funkcionalumą (kolekcijų sistemoje).
Kas yra surašymas?
„Enumeration“yra vieša „Java“sąsaja, pristatyta JDK 1.0, kuri suteikia galimybę išvardyti per elementų sekas. Jis randamas po java.util paketu. Kai surašymo sąsają įgyvendina objektas, tas objektas gali sukurti elementų seką. Sąrašo sąsajoje yra du metodai. Metodas hasMoreElements () patikrins, ar šiame sąraše yra daugiau elementų, o nextElement () grąžina kitą elementą sekoje (jei dar reikia bent vieno). Kitaip tariant, paskambindamas „nextElement“(), programuotojas gali pasiekti atskirus serijos elementus. Pvz., Norint atsispausdinti visus „Vector v1“elementus naudojant „Enumerator“, galima naudoti šį kodo fragmentą.
Surašymas e = v1.elements ();
Nors (e.hasMoreLements ()) {
System.out.println (e.nextElement ());
}
Surašytojas taip pat gali būti naudojamas įvesties srautui į SequenceInputStream objektus apibrėžti.
Kas yra „Iterator“?
„Iterator“yra vieša sąsaja „Java.util“pakete, leidžianti kartoti per kolekcijos objektų elementus, įgyvendinančius rinkinių sistemą (pvz., „ArrayList“, „LinkedList“ir kt.). Tai buvo pristatyta JDK 1.2 versijoje ir „Java Collections“sistemoje pakeitė „Enumerator“. „Iterator“turi tris metodus. Metodas hasNext () patikrina, ar kolekcijoje yra likusių elementų, o metodas next () grąžina kitą elementą serijoje. Metodas „pašalinti“) gali būti naudojamas dabartiniam elementui pašalinti iš pagrindinės kolekcijos. Pvz., Norint atsispausdinti visus „Vector v1“elementus naudojant „Iterator“, galima naudoti šį kodo fragmentą.
Iteratorius i = v1.elementai ();
Nors (i.hasNext ()) {
System.out.println (el. Kitas ());
}
Kuo skiriasi Surašymas nuo Iteratoriaus?
Nors „Enumeration“ir „Iterator“yra dvi iš sąsajų, esančių pakete java.util, leidžiančios kartoti / išvardyti per serijos elementus, jie turi savo skirtumų. Tiesą sakant, „Iterator“, kuris buvo pristatytas po surašymo, „Java Collections“sistemoje pakeičia sąrašą. Skirtingai nei Aprašymas, „Iterator“yra saugus nuo gedimų. Tai reiškia, kad tuo pačiu metu modifikuoti (pagrindinę kolekciją) neleidžiama, kai naudojamas „Iterator“. Tai labai naudinga aplinkoje, kurioje yra daug sriegių, kur visada kyla pavojus, kad bus atliekami modifikacijos. Tuo pačiu metu atlikus modifikavimą, „Iterator“objektas išmes „ConcurrentModificationException“. Iterator turi trumpesnius metodų pavadinimus, palyginti su Enumerator. Be to,iteratorius turi papildomą funkciją - elementai ištrinami iteracijos metu (o tai neįmanoma naudojant surašymo priemonę). Taigi, jei reikia pašalinti elementus iš kolekcijos, „Iterator“yra vienintelis variantas, į kurį galima atsižvelgti.