Подтвердить что ты не робот

Использование 'for' в Java

Я новичок в Java и в другом вопросе о для циклов ответ сказал, что для Java было два использования:

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


for (String a : anyIterable) {
}

Я знаю первое использование for и много использовал его, но я никогда не видел второго. Что он использовал, и когда я буду использовать его?

4b9b3361

Ответ 1

Первый из двух, который вы указываете, представляет собой классический цикл C for. Это дает программисту возможность контролировать критерии итерации и позволяет выполнять три операции: инициализация; тест петли; выражение приращения. Хотя он часто используется для постепенного повторения для определенного количества попыток, как в примере:

for (int i=0; i < N : i++)

В коде есть еще много экземпляров, где for использовался для перебора коллекций:

for (Iterator iter = myList.iterator(); iter.hasNext();)

Чтобы облегчить сборку второго типа (где третье предложение часто не использовалось) и дополнять Generics, представленный на Java 1.5, второй из ваших двух примеров - расширенный цикл цикла или for-each loop - был введен.

Второй используется с массивами и коллекциями Generic. См. эту документацию. Он позволяет выполнять итерацию по общей коллекции, где вы знаете тип Collection, без необходимости приведения результата Iterator.next() к известному типу.

Для сравнения:

for(Iterator iter = myList.iterator; iter.hasNext() ; ) {
   String myStr = (String) iter.next();
   //...do something with myStr
}

с

for (String myStr : myList) {
   //...do something with myStr
 }

Этот "новый стиль" для цикла также может использоваться с массивами:

String[] strArray= ...
for (String myStr : strArray) {
   //...do something with myStr
}

Ответ 2

Цикл "for in" - это в основном глазная конфета, которая облегчает чтение кода. (Если вы произнесите: как "in" ).

Я использую второй тип почти исключительно в своем собственном коде, когда я повторяю список или массив.

Я все еще использую регулярный цикл для работы с главным математическим кодом или когда мне нужно "i", чтобы увидеть, сколько раз я зациклился.

Ответ 3

Используется для итерации по всему массиву или коллекции Iterable. Он в основном заменяет:

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

И может использоваться с Generics, который довольно круто

Ответ 4

Он называется a для каждого цикла и в основном, его можно использовать со всем, что реализует

java.lang.Iterable

Общие коллекции реализуют этот интерфейс, но вы также можете сделать свой собственный класс. Он очень легко справляется со всем в списке/коллекции, хотя недостатком является то, что вы не получаете явного доступа к текущему номеру в списке, как в традиционном цикле. Существует несколько дополнительных накладных расходов, связанных с этим типом цикла над традиционными циклами из-за вызовов классов-итераторов.

Ответ 5

Оба они одинаковы по функциональности, но для (String a: anyIterable) {}, более читабельна, менее типична и короче. for (int я = 0; я < N: я ++) индексирует коллекцию по переменной управления контуром i и для (String a: anyIterable) {} не индексирует коллекцию