Luettelo vs Iteraattori
On olemassa monia tietorakenteita, jotka toimivat kokoelmina Javassa, kuten vektorit, hash-taulukot ja luokat, jotka toteuttavat Java Collections Frameworkin (eli HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap ja LinkedHashSet). Javassa on lukuisia tapoja iteroida objektien yksittäisten elementtien läpi. Java tarjoaa kaksi käyttöliittymää tämän tehtävän helpottamiseksi. Luettelo ja Iterator ovat kaksi java.util-paketin käyttöliittymää, jotka tarjoavat toiminnot luetellaksesi sekvenssien tai objektien avulla. Enumerator otettiin käyttöön JDK 1:ssä.0 ja Iterator, jotka otettiin käyttöön JDK 1.2:ssa, käytännössä kopioivat Enumeratorin toiminnallisuuden (kokoelmakehyksen sisällä).
Mikä on luettelointi?
Enumeration on julkinen Java-käyttöliittymä, joka on otettu käyttöön JDK 1.0:ssa ja joka tarjoaa mahdollisuuden luetella elementtisarjoja. Se löytyy java.util-paketista. Kun Enumeration-rajapinta on toteutettu objektilla, tämä objekti voi luoda elementtisarjan. Luetteloliittymässä on kaksi tapaa. Metodi hasMoreElements() testaa, sisältääkö tämä luettelo enemmän elementtejä ja nextElement() palauttaa sekvenssin seuraavan elementin (jos vähintään yksi on jäljellä). Toisin sanoen kutsumalla nextElement() peräkkäin ohjelmoija pääsee käsiksi sarjan yksittäisiin elementteihin. Jos esimerkiksi haluat tulostaa kaikki Vector v1:n elementit Enumeratorin avulla, voidaan käyttää seuraavaa koodinpätkää.
Luettelo e=v1.elements();
While(e.hasMoreLements()){
System.out.println(e.nextElement());
}
Enumeratorilla voidaan myös määrittää syötevirta SequenceInputStream-objekteihin.
Mikä Iterator on?
Iterator on Java.util-paketin julkinen käyttöliittymä, joka sallii iteroinnin kokoelmaobjektien elementtien läpi, jotka toteuttavat Collections-kehyksen (kuten ArrayList, LinkedList jne.). Tämä otettiin käyttöön JDK 1.2:ssa ja korvasi Enumeratorin Java Collections Frameworkissa. Iteraattorilla on kolme tapaa. Metodi hasNext() testaa, onko kokoelmassa jäljellä elementtejä ja next()-metodi palauttaa sarjan seuraavan elementin. Poista()-menetelmää voidaan käyttää nykyisen elementin poistamiseen taustalla olevasta kokoelmasta. Esimerkiksi, jos haluat tulostaa kaikki Vector v1:n elementit Iteratorilla, voidaan käyttää seuraavaa koodinpätkää.
Iteraattori i=v1.elements();
While(i.hasNext()){
System.out.println(e.next());
}
Mitä eroa Enumerationin ja Iteratorin välillä on?
Vaikka Enumeration ja Iterator ovat kaksi java.util-paketin käyttöliittymää, jotka mahdollistavat iteroinnin/luettelon sarjan elementtien läpi, niillä on erojaan. Itse asiassa Iterator, joka otettiin käyttöön Enumerationin jälkeen, korvaa luettelon Java Collections -kehyksessä. Toisin kuin Enumeration, Iterator on vikasietoinen. Tämä tarkoittaa, että samanaikaiset muutokset (alla olevaan kokoelmaan) eivät ole sallittuja, kun Iteratoria käytetään. Tämä on erittäin hyödyllistä monisäikeisissä ympäristöissä, joissa on aina samanaikaisten muutosten riski. Samanaikaisen muutoksen tapauksessa Iterator-objekti heittää ConcurrentModificationExceptionin. Iteratorilla on lyhyemmät menetelmänimet verrattuna Enumeratoriin. Lisäksi iteraattorissa on lisätoimintona elementtien poistaminen iteroinnin aikana (mikä ei ole mahdollista Enumeratorilla). Joten jos elementtejä on poistettava kokoelmasta, Iterator on ainoa harkittava vaihtoehto.