В этой статье рассмотрим ключевой аспект языка Java – многократное выполнение оператора или группы операторов с использованием цикла for.
Простой цикл for
Цикл for – это управляющая структура, которая позволяет повторять определенные операции, увеличивая и вычисляя счетчик цикла.
Перед первой итерацией инициализируется счетчик циклов, затем выполняется оценка условия, за которой следует определение шага (обычно простое приращение).
Синтаксис цикла for:
for (инициализация; логическое выражение; шаг)
тело цикла;
Посмотрим на простом примере:
for (int i = 0; i < 5; i++) {
System.out.println("Простой цикл: i = " + i);
}
Инициализация, логическое выражение и шаг, используемые в операторах for, являются необязательными. Вот пример бесконечного цикла for:
for ( ; ; ) {
// бесконечный цикл for
}
Метка для цикла
Можно пометить циклы. Это полезно, если есть вложенные циклы for, чтобы можно было прервать/продолжить (break/continue) неспецифический цикл for:
aa: for (int i = 1; i <= 3; i++) {
if (i == 1)
continue;
bb: for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
break aa;
}
System.out.println(i + " " + j);
}
}
Расширенный цикл
Начиная с Java 5, есть второй вид цикла for, называемый расширенным for, который упрощает перебор всех элементов в массиве или коллекции.
Синтаксис расширенного цикла for:
for(Type item : items)
тело цикла;
Поскольку этот цикл упрощен по сравнению со стандартным циклом for, необходимо объявить только две вещи при инициализации цикла:
- Дескриптор элемента, над которым сейчас работаем.
- Исходный массив/коллекция, по которым итерируемся.
Следовательно, можно сказать, что: для каждого элемента в items назначьте элемент переменной item и запустите тело цикла.
Посмотрим на простой пример:
int[] intArr = { 0,1,2,3,4 };
for (int num : intArr) {
System.out.println("Расширенный цикл for-each: i = " + num);
}
Можно использовать его для перебора различных структур данных Java:
Получив объект List<String> list, можно пройтись по нему:
for (String item : list) {
System.out.println(item);
}
Можно аналогичным образом перебрать Set<String> set:
for (String item : set) {
System.out.println(item);
}
Получив Map<String,Integer> map, можно выполнить итерацию по ней:
for (Entry<String, Integer> entry : map.entrySet()) {
System.out.println(
"Key: " + entry.getKey() +
" - " +
"Value: " + entry.getValue());
}
Iterable.forEach()
Начиная с Java 8, можно использовать циклы for-each немного по-другому. Теперь есть специальный метод forEach() в интерфейсе Iterable, который принимает лямбда-выражение, представляющее действие, которое хотим выполнить.
Внутри он делегирует задание стандартному циклу:
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
Посмотрим на пример:
List<String> names = new ArrayList<>();
names.add("Larry");
names.add("Steve");
names.add("James");
names.add("Conan");
names.add("Ellen");
names.forEach(name -> System.out.println(name));
Заключение
В этом кратком руководстве рассмотрели цикл for в Java.
Примеры можно найти на GitHub.