Использование 'for' в Java
Я новичок в Java и в другом вопросе о для циклов ответ сказал, что для Java было два использования:
for (int i = 0; i < N; i++) {
}
for (String a : anyIterable) {
}
Я знаю первое использование for и много использовал его, но я никогда не видел второго. Что он использовал, и когда я буду использовать его?
Ответы
Ответ 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) {} не индексирует коллекцию