2009-08-07 16 views
19

Jestem całkiem nowy, Java iw innym przepełnienie stosu pytanie o for loops odpowiedź powiedział, że nie było dwa zastosowania w Javie:Zastosowań „dla” Java

for (int i = 0; i < N; i++) { 
} 


for (String a : anyIterable) { 
} 

wiem pierwsze użycie i użyłem go dużo, ale nigdy nie widziałem drugiego. Do czego służy i kiedy powinienem go używać?

Odpowiedz

33

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 
} 
+0

lub macierzy. Lub regularne zbieranie, jeśli twoja zmienna jest typu Object :-) – ChssPly76

+3

Nie jest przeznaczona wyłącznie dla ogólnych kolekcji. –

+0

@pavel - jestem gotów zrobić to odpowiedź wiki, jeśli chcesz dodać do niej więcej. – akf

1

Jest używany do iteracji przez cały array lub Iterable collection. To w zasadzie zastępuje:

for(int i=0; i<N.length; i++) 

i mogą być używane z rodzajowych, który jest dość chłodny

4

W „w” pętli jest głównie dla oka sprawia, że ​​kod łatwiejsze do odczytania. (Jeśli wymawiasz: jako "w").

Używam drugiego typu prawie wyłącznie w moim własnym kodzie, gdy jestem iteracji na liście lub tablicy.

Nadal używam zwykłej pętli for, gdy mamy do czynienia z głównie z kodem matematycznym, lub gdy potrzebuję "i", aby zobaczyć ile razy zapętliłem.

1

Nazywa się dla każdej pętli i w zasadzie, może on być stosowany z czymkolwiek, który implementuje

java.lang.Iterable 

Generic zbiory wdrożyć ten interfejs, ale można stworzyć własną klasę, że uczynił tak, jak dobrze. Sprawia, że ​​radzenie sobie ze wszystkim na liście/kolekcji jest bardzo łatwe, chociaż wadą jest to, że nie dostajesz wyraźnego dostępu do bieżącego numeru na liście, tak jak robisz to w tradycyjnej pętli.Istnieje pewien dodatkowy narzut związany z tym typem pętli w porównaniu z tradycyjnymi pętlami z powodu wywołań do klas iteratora.

0

Oba mają taką samą funkcjonalność, ale dla (String a: anyIterable) {}, jest bardziej czytelny, mniej piszący i krótszy. do (int i = 0; i < n: i ++) indeksowanie gromadzenie, w pętli sterowania zmienną i i dla (string: anyIterable) {} nie wskaźnik zbierania