← Назад к вопросам

Когда используется цикл for?

2.0 Middle🔥 201 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Когда использовать цикл for в Java

Цикл for — один из основных инструментов в Java. Существует несколько разновидностей, и каждая применяется в своих сценариях.

Классический for (индексный)

Традиционный цикл с инициализацией, условием и инкрементом:

for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

Используется когда:

  • Нужен доступ по индексу к элементам массива
  • Нужно управлять шагом итерации (i++, i+=2, i--)
  • Нужно использовать индекс в вычислениях
  • Нужно удалять элементы во время итерации (осторожно!)
// Правильное удаление элементов
for (int i = list.size() - 1; i >= 0; i--) {
    if (list.get(i).isExpired()) {
        list.remove(i);  // Удаляем с конца, чтобы не сбить индексы
    }
}

for-each (enhanced for)

Синтаксический сахар для итерации по коллекциям и массивам:

for (String item : list) {
    System.out.println(item);
}

for (int value : array) {
    sum += value;
}

Используется когда:

  • Просто перебираешь элементы без индекса
  • Не нужно удалять элементы во время итерации
  • Код более читаем и безопасен (нет IndexOutOfBoundsException)
  • Работаешь с любыми Iterable (Set, List, Queue)
// Хорошо
List<User> users = getUserList();
for (User user : users) {
    process(user);
}

// Плохо — ConcurrentModificationException
for (User user : users) {
    if (user.isInactive()) {
        users.remove(user);  // ОШИБКА!
    }
}

Iterator цикл

Явное использование итератора — более контролируемый подход:

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (shouldRemove(item)) {
        iterator.remove();  // Безопасное удаление
    }
}

Используется когда:

  • Нужно удалять элементы во время итерации
  • Нужен контроль над процессом итерации
  • Работаешь с LinkedList (эффективнее for-each)

while цикл

Для более сложных условий окончания:

while (condition) {
    // обработка
    if (someEvent) {
        break;  // Ранний выход
    }
}

Используется когда:

  • Условие выхода сложное или неизвестно заранее
  • Количество итераций неопределённо
  • Нужны операции до проверки условия

Stream API (современный подход)

В Java 8+ для функционального стиля:

list.stream()
    .filter(item -> item.isValid())
    .map(item -> item.getValue())
    .forEach(System.out::println);

Используется когда:

  • Нужны трансформации данных (map, filter, reduce)
  • Хочется более функциональный стиль
  • Возможна параллельная обработка
// Параллельная обработка
list.parallelStream()
    .filter(item -> item.isExpensive())
    .forEach(this::process);

Практические примеры

Классический for для ArrayList:

ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
for (int i = 0; i < numbers.size(); i++) {
    System.out.println(i + ": " + numbers.get(i));
}

for-each для LinkedList:

LinkedList<Integer> numbers = new LinkedList<>(Arrays.asList(1, 2, 3, 4, 5));
for (Integer num : numbers) {
    System.out.println(num);  // Более эффективно, чем get(i)
}

Цикл с условиями выхода:

for (int attempt = 0; attempt < MAX_ATTEMPTS; attempt++) {
    try {
        result = performAction();
        break;  // Успех
    } catch (Exception e) {
        if (attempt == MAX_ATTEMPTS - 1) {
            throw new RuntimeException("Failed after " + MAX_ATTEMPTS + " attempts", e);
        }
    }
}

Сравнительная таблица

Тип циклаКогда использоватьПроизводительностьБезопасность
Классический forНужен индексОтличнаяЗависит от кода
for-eachПросто итерацияХорошаяВысокая
IteratorУдаление элементовСредняяВысокая
whileСложное условиеЗависитЗависит
StreamТрансформацииGood (parallel)Высокая

Рекомендация

В современной Java предпочитай:

  1. for-each — для простой итерации (80% случаев)
  2. Классический for — когда нужен индекс
  3. Iterator — когда нужно удалять элементы
  4. Stream — для функциональных трансформаций
  5. while — для нестандартных условий

Этот подход делает код более читаемым и безопасным.

Когда используется цикл for? | PrepBro