Loendamine vs iteraator
Java-s on palju andmestruktuure, mis toimivad kogudena, näiteks Vektorid, Hassi tabelid ja klassid, mis rakendavad Java Collection Frameworkit (nt HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap ja LinkedHashSet). Java objektide üksikute elementide abil saab iteratsiooni teha mitmel viisil. Java pakub selle ülesande hõlbustamiseks kahte liidest. Loendamine ja iteraator on kaks paketti java.util leitud liidesest, mis pakuvad funktsionaalsust järjestuste või objektide loendamiseks üksuste komplektiga. Loendajat tutvustati JDK 1.0-s ja JDK 1.2-s kasutusele võetud iteraator dubleerib praktiliselt loendaja funktsioone (kogude raamistiku piires).
Mis on loendamine?
Loendamine on Java avalik versioon, liideses JDK 1.0, mis annab võimaluse loetleda läbi elementide jada. See asub paketi java.util alt. Kui objekt on loendamise liidest rakendanud, saab see objekt genereerida elementide jada. Loendusliidesel on kaks meetodit. Meetod hasMoreElements () testib, kas see loend sisaldab rohkem elemente ja nextElement () tagastab järgmise elemendi jadas (kui on veel vähemalt üks minna). Teisisõnu, kutsudes järjestikku nextElement (), pääseb programmeerija juurde seeria üksikutele elementidele. Näiteks kõigi v1 elementide printimiseks loenduri abil saab kasutada järgmist koodilõiku.
Loend e = v1.elemendid ();
Kuigi (e.hasMoreLements ())
System.out.println (e.nextElement ());
Loendurit saab kasutada ka sisestusvoo määratlemiseks SequenceInputStream objektidesse.
Mis on iteraator?
Iterator on Java.util paketi avalik liides, mis võimaldab iteratsiooni kogude objektide elementide kaudu, mis rakendavad kogude raamistikku (näiteks ArrayList, LinkedList jne). See tutvustati JDK 1.2-s ja asendas Java kogude raamistikus loendaja. Iteraatoril on kolm meetodit. Meetod hasNext () testib, kas kollektsioonis on veel elemente ja järgmine () meetod tagastab sarja järgmise elemendi. Eemaldamise () meetodit saab kasutada praeguse elemendi eemaldamiseks aluskollektsioonist. Näiteks kõigi v1 elementide printimiseks Iteraatori abil saab kasutada järgmist koodilõiku.
Iteraator i = v1.elemendid ();
Kuigi (i.hasNext ())
System.out.println (e.next ());
Mis vahe on loendamisel ja iteraatoril??
Ehkki loendamine ja iteraator on kaks paketti java.util leiduvat liidest, mis võimaldavad sarja elementide iteratsiooni / loendamist, on neil oma erinevused. Tegelikult asendab pärast loendamist kasutusele võetud iteraator Java kollektsioonide raamistikus loendamise. Erinevalt loendusest on Iterator tõrkekindel. See tähendab, et samaaegseid muudatusi (aluskogumikus) ei ole Iteraatori kasutamisel lubatud. See on väga kasulik mitme keermega keskkonnas, kus on alati samaaegsete muudatuste oht. Samaaegse muutmise korral viskab objekt Iterator välja ConcurrentModificationException. Iteratoril on Enumeratoriga võrreldes lühemad meetodinimed. Lisaks on iteraatoril täiendav funktsioon elementide kustutamine iteratsiooni ajal (mis pole Enumeratori abil võimalik). Seega, kui on vaja elemendid kollektsioonist eemaldada, on Iterator ainus võimalus, mida saab kaaluda.