Enumerare vs Iterator
Există multe structuri de date care acționează ca colecții în Java, cum ar fi Vectori, tabele Hash și clase care implementează Java Collections Framework (adică HashMap, HashSet, ArrayList, TreeSet, TreeMap, LinkedList, LinkedHashMap și LinkedHashSet). Există numeroase moduri de a itera prin elementele individuale ale obiectelor în Java. Java oferă două interfețe pentru a ușura această sarcină. Enumerarea și Iteratorul sunt două dintre interfețele găsite în pachetul java.util care oferă funcționalitate de enumerare prin secvențe sau obiecte cu un set de elemente. Enumeratorul a fost introdus în JDK 1.0 și Iterator care a fost introdus în JDK 1.2 duplică practic funcționalitatea Enumeratorului (în cadrul Collections Framework).
Ce este enumerarea?
Enumeration este o interfață publică în Java, introdusă în JDK 1.0, care oferă posibilitatea de a enumera prin secvențe de elemente. Se găsește sub pachetul java.util. Când interfața de Enumerare este implementată de un obiect, acel obiect poate genera o secvență de elemente. Interfața de enumerare are două metode. Metoda hasMoreElements() va testa dacă această enumerare conține mai multe elemente, iar nextElement() returnează următorul element din secvență (dacă mai rămâne cel puțin unul). Cu alte cuvinte, apelând succesiv nextElement() programatorul poate accesa elementele individuale din serie. De exemplu, pentru a imprima toate elementele din Vector v1 folosind Enumerator, poate fi folosit următorul fragment de cod.
Enumerarea e=v1.elements();
While(e.hasMoreLements()){
System.out.println(e.nextElement());
}
Enumeratorul poate fi folosit și pentru a defini fluxul de intrare către obiectele SequenceInputStream.
Ce este Iterator?
Iterator este o interfață publică în pachetul Java.util, care permite iterarea prin elemente ale obiectelor colecțiilor care implementează cadrul Colecțiilor (cum ar fi ArrayList, LinkedList etc.). Acesta a fost introdus în JDK 1.2 și a înlocuit Enumeratorul în cadrul Java Collections Framework. Iteratorul are trei metode. Metoda hasNext() testează dacă există elemente rămase în colecție, iar metoda next() returnează următorul element din serie. Metoda remove() poate fi folosită pentru a elimina elementul curent din colecția de bază. De exemplu, pentru a imprima toate elementele din Vector v1 folosind Iterator, poate fi folosit următorul fragment de cod.
Iterator i=v1.elements();
While(i.hasNext()){
System.out.println(e.next());
}
Care este diferența dintre Enumerare și Iterator?
Deși, Enumeration și Iterator sunt două dintre interfețele găsite în pachetul java.util, care permit iterarea/enumerarea elementelor unei serii, ele au diferențele lor. De fapt, Iterator, care a fost introdus după Enumerare, înlocuiește Enumerarea în cadrul Java Collections. Spre deosebire de Enumeration, Iterator este sigur. Aceasta înseamnă că modificările concurente (la colecția de bază) nu sunt permise atunci când este utilizat Iterator. Acest lucru este foarte util în mediile cu mai multe fire în care există întotdeauna riscul unor modificări concurente. În cazul unei modificări concurente, obiectul Iterator va lansa o excepție ConcurrentModificationException. Iteratorul are nume de metode mai scurte în comparație cu Enumerator. Mai mult, iteratorul are funcționalitatea suplimentară de ștergere a elementelor în timpul iterației (ceea ce nu este posibil folosind Enumerator). Deci, dacă este nevoie să eliminați elemente din colecție, Iterator este singura opțiune care poate fi luată în considerare.