Перейти к содержанию

Цикл For в Java

В этой статье рассмотрим ключевой аспект языка 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, необходимо объявить только две вещи при инициализации цикла:

  1. Дескриптор элемента, над которым сейчас работаем.
  2. Исходный массив/коллекция, по которым итерируемся.

Следовательно, можно сказать, что: для каждого элемента в 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.

Оригинал