Pierwszy z dwóch określonych przez użytkownika to klasyczna pętla C for
. Daje to programistom kontrolę nad kryteriami iteracji i pozwala na trzy operacje: inicjalizację; test pętli; wyrażenie przyrostowe. Choć jest ona wykorzystywana często do przyrostowego powtórzyć dla określonej liczby prób, jak w yor przykład:
for (int i=0; i < N : i++)
Istnieje wiele przypadków, w kodzie gdzie for
było wykorzystanie iteracyjne nad kolekcji:
for (Iterator iter = myList.iterator(); iter.hasNext();)
Aby rozwiązać problem związany z drugim typem bojlera (w którym często nie użyto trzeciej klauzuli) oraz uzupełnieniem wprowadzonego Generics Java 1.5, wprowadzono drugi z dwóch przykładów - ulepszoną pętlę for lub for-each loop
.
Drugi jest używany z tablicami i zbiorami gatunkowymi. See this documentation. To pozwala na iterację w ogólnej kolekcji, w której znamy typ Collection
, bez konieczności rzucania rezultatu z Iterator.next()
do znanego typu.
Porównaj:
for(Iterator iter = myList.iterator; iter.hasNext() ;) {
String myStr = (String) iter.next();
//...do something with myStr
}
z
for (String myStr : myList) {
//...do something with myStr
}
Ten 'nowy styl' do pętli może być używany z tablic, a także:
String[] strArray= ...
for (String myStr : strArray) {
//...do something with myStr
}
lub macierzy. Lub regularne zbieranie, jeśli twoja zmienna jest typu Object :-) – ChssPly76
Nie jest przeznaczona wyłącznie dla ogólnych kolekcji. –
@pavel - jestem gotów zrobić to odpowiedź wiki, jeśli chcesz dodać do niej więcej. – akf