Poštevanje proti Iteratorju
Na Javi obstaja veliko struktur podatkov, ki delujejo kot zbirke, kot so Vectors, Hash tabele in razredi, ki izvajajo zbirko Java Collections Framework (tj. HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap in LinkedHashSet). Na Javi obstaja več načinov za iteracijo skozi posamezne elemente predmetov. Java ponuja dva vmesnika, da olajša to nalogo. Poštevanje in Iterator sta dva vmesnika, ki jih najdete v paketu java.util, ki omogočata naštevanje skozi zaporedja ali predmete z nizom elementov. Enumerator je bil predstavljen v JDK 1.0, in Iterator, ki je bil predstavljen v JDK 1.2, praktično podvaja funkcionalnost Popisovalca (v okviru zbirk).
Kaj je naštevanje?
Poštevanje je javni vmesnik na Javi, uveden v JDK 1.0, ki omogoča možnost naštevanja skozi zaporedja elementov. Najdemo ga pod paketom java.util. Ko vmesnik Poštevanje izvede predmet, lahko ta objekt ustvari zaporedje elementov. Popisni vmesnik ima dve metodi. Metoda hasMoreElements () bo preizkusila, če ta naštevanje vsebuje več elementov in nextElement () vrne naslednji element v zaporedju (če je vsaj še en). Z drugimi besedami, programer lahko s klicanjem nextElement () zaporedoma dostopa do posameznih elementov v seriji. Na primer za tiskanje vseh elementov v Vector v1 s pomočjo Enumeratorja lahko uporabite naslednji delček kode.
Poštevanje e = v1.elements ();
Medtem ko (e.hasMoreLements ())
System.out.println (e.nextElement ());
Za določitev toka vhoda v predmete SequenceInputStream lahko uporabite tudi Enumerator.
Kaj je Iterator?
Iterator je javni vmesnik v paketu Java.util, ki omogoča ponovitev skozi elemente predmetov zbirke, ki implementirajo okvir Zbirke (kot so ArrayList, LinkedList itd.). To je bilo predstavljeno v JDK 1.2 in je nadomestilo Poštevalca v okviru Java Collection Collection. Iterator ima tri metode. Metoda hasNext () preizkuša, ali so v zbirki še preostali elementi in metoda next () vrne naslednji element v nizu. Metodo remove () lahko uporabite za odstranitev trenutnega elementa iz osnovne zbirke. Na primer za tiskanje vseh elementov v Vector v1 s pomočjo Iteratorja lahko uporabite naslednji delček kode.
Iterator i = v1.elements ();
Medtem ko (i.hasNext ())
System.out.println (e.next ());
Kakšna je razlika med Poštevanjem in Iteratorjem?
Čeprav sta Enumeration in Iterator dva vmesnika, najdena v paketu java.util, ki omogočata iteracijo / naštevanje skozi elemente serije, imata svoje razlike. Pravzaprav Iterator, ki je bil uveden po popisu, nadomešča popis v okviru zbirk Java Collections. Za razliko od štetja je Iterator brezhiben. To pomeni, da sočasne spremembe (v osnovni zbirki) niso dovoljene, kadar se uporablja Iterator. To je zelo uporabno v okoljih z več niti in kjer obstaja vedno nevarnost hkratnih sprememb. V primeru hkratne spremembe bo objekt Iterator vrgel ConcurrentModificationException. Iterator ima krajša imena metod v primerjavi z Enumeratorjem. Poleg tega ima iterator dodatno funkcijo brisanja elementov med iteracijo (kar ni mogoče z uporabo Enumeratorja). Če je treba odstraniti elemente iz zbirke, je Iterator edina možnost, ki jo je mogoče upoštevati.