Începând cu Java
1.5, avem la dispoziție forma for-each
a clasicului ciclu for. Aceasta ne
ajută să iterăm rapid o colecție, astfel:
for (String
element : list) {
System.out.println(element);
}
unde variabila
list a fost declarată și inițializată astfel:
List<String> list = new ArrayList<>() { {
add("Luni");
add("Marti");
add("Miercuri");
add("Party");
add("Joi");
add("Vineri");
}
};
ACTUALIZARE: Se pare că varianta aceasta de adăugare a elementelor e un anti-pattern, deci nu e bine să o folosim. Detalii aici:
http://blog.jooq.org/2014/12/08/dont-be-clever-the-double-curly-braces-anti-pattern/
O problemă
devenită deja clasică este ștergerea de elemente în timpul iterării. Dacă în
interiorul ciclului for scriem ceva
de genul:
for (String
element : list) {
if (element.equals("Party")) {
list.remove(element);
}
}
se aruncă la runtime o excepție java.util.ConcurrentModificationException.
Nu putem folosi
forma for-each a ciclului for pentru a șterge elemente în timpul
iterării, dar avem la dispoziție interfața java.util.Iterator, care expune
metoda remove(). Aceasta se dovedește
a fi exact ce avem nevoie:
for
(Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
if (iterator.next().equals("Party")) {
iterator.remove();
}
}
Metoda remove() șterge ultimul element returnat
de metoda next(), declarată în interfața Iterator.
Totuși, trebuie să ținem cont de faptul că această operație este opțională, după
cum se menționează în Javadoc. În concluzie, atunci când folosim iteratori
putem atât să iterăm colecția, cât și să ștergem elementele acesteia.