Enumeració versus iterador
Hi ha moltes estructures de dades que actuen com a col·leccions a Java, com ara Vectors, taules Hash i classes que implementen Java Collections Framework (és a dir, HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap i LinkedHashSet). Hi ha moltes maneres d'iterar a través dels elements individuals dels objectes a Java. Java ofereix dues interfícies per facilitar aquesta tasca. L'enumeració i l'iterador són dues de les interfícies que es troben al paquet java.util que proporcionen funcionalitat per enumerar mitjançant seqüències o objectes amb un conjunt d'elements. Enumerator es va introduir a JDK 1.0 i Iterator que es va introduir a JDK 1.2 pràcticament duplica la funcionalitat de l'Enumerator (dins del marc de col·leccions).
Què és l'enumeració?
L'enumeració és una interfície pública en Java, introduïda a JDK 1.0, que proporciona la capacitat d'enumerar mitjançant seqüències d'elements. Es troba al paquet java.util. Quan un objecte implementa la interfície d'enumeració, aquest objecte pot generar una seqüència d'elements. La interfície d'enumeració té dos mètodes. El mètode hasMoreElements() provarà si aquesta enumeració conté més elements i nextElement() retorna el següent element de la seqüència (si en queda almenys un més). En altres paraules, cridant nextElement() successivament, el programador pot accedir als elements individuals de la sèrie. Per exemple, per imprimir tots els elements de Vector v1 amb Enumerator, es pot utilitzar el fragment de codi següent.
Enumeració e=v1.elements();
Mentre(e.hasMoreLements()){
System.out.println(e.nextElement());
}
L'enumeradortambé es pot utilitzar per definir el flux d'entrada als objectes SequenceInputStream.
Què és Iterator?
Iterator és una interfície pública del paquet Java.util, que permet iterar a través d'elements dels objectes de col·leccions que implementen el marc de col·leccions (com ara ArrayList, LinkedList, etc.). Això es va introduir a JDK 1.2 i va substituir l'Enumerator dins del Java Collections Framework. Iterator té tres mètodes. El mètode hasNext() prova si hi ha elements restants a la col·lecció i el mètode next() retorna el següent element de la sèrie. El mètode remove() es pot utilitzar per eliminar l'element actual de la col·lecció subjacent. Per exemple, per imprimir tots els elements de Vector v1 amb Iterator, es pot utilitzar el fragment de codi següent.
Iterator i=v1.elements();
Mentre(i.hasNext()){
System.out.println(e.next());
}
Quina diferència hi ha entre l'enumeració i l'iterador?
Tot i que Enumeration i Iterator són dues de les interfícies que es troben al paquet java.util, que permeten iterar/enumerar a través d'elements d'una sèrie, tenen les seves diferències. De fet, Iterator, que es va introduir després de l'enumeració, substitueix l'enumeració dins del marc de col·leccions de Java. A diferència de l'enumeració, Iterator és segur. Això vol dir que les modificacions concurrents (a la col·lecció subjacent) no es permeten quan s'utilitza Iterator. Això és molt útil en entorns multifils on sempre hi ha el risc de modificacions concurrents. En cas d'una modificació simultània, l'objecte Iterator llançarà una ConcurrentModificationException. Iterator té noms de mètodes més curts en comparació amb Enumerator. A més, l'iterador té la funcionalitat addicional d'esborrar elements durant la iteració (que no és possible amb Enumerator). Per tant, si cal eliminar elements de la col·lecció, Iterator és l'única opció que es pot considerar.