Перейти к основному содержимому

Цикл for-each в Java

· 4 мин. чтения

1. Обзор

В этом руководстве мы обсудим цикл for -each в Java, а также его синтаксис, работу и примеры кода. Наконец, мы поймем его преимущества и недостатки.

2. Простой цикл for

Простой цикл for в Java по существу состоит из трех частей — инициализации, логического условия и шага:

for (initialization; boolean-condition; step) {
statement;
}

Он начинается с инициализации переменной цикла, за которой следует логическое выражение. Если условие истинно , оно выполняет оператор(ы) в цикле и увеличивает/уменьшает переменную цикла. В противном случае он завершает цикл.

Этот шаблон делает его немного сложным и трудным для чтения. Более того, если мы не напишем условие правильно, всегда есть шанс попасть в бесконечный цикл.

3. для каждого цикла

Цикл for -each был введен в Java 5. Мы также называем его расширенным циклом for .

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

Имя для -each означает, что каждый элемент массива или коллекции проходится один за другим.

3.1. Синтаксис

Цикл for -each состоит из объявления переменной цикла, за которой следует двоеточие (:), за которым следует имя массива или коллекции:

for (data_type var_name : array | collection) {
// code
}

3.2. Работающий

Для каждой итерации цикл for - each берет каждый элемент коллекции и сохраняет его в переменной цикла. Таким образом, он выполняет написанный в теле цикла код для каждого элемента массива или коллекции.

Самое главное, обход происходит до последнего элемента массива или коллекции.

3.3. Примеры

Давайте посмотрим на пример обхода массива с помощью цикла for -each:

int numbers[] = { 1, 2, 3, 4, 5 };

for (int number : numbers) {
System.out.print(number + " ");
}

Здесь цикл for -each проходит по каждому элементу массива чисел один за другим до конца. Поэтому нет необходимости обращаться к элементам массива с помощью индексации.

Теперь давайте рассмотрим несколько примеров обхода различных коллекций с помощью цикла for -each.

Начнем со списка :

String[] wordsArray = { "Java ", "is ", "great!" };
List<String> wordsList = Arrays.asList(wordsArray);

for (String word : wordsList) {
System.out.print(word + " ");
}

Точно так же мы можем пройтись по всем элементам Set :

Set<String> wordsSet = new HashSet();
wordsSet.addAll(wordsList);

for (String word : wordsSet) {
System.out.print(word + " ");
}

Кроме того, мы также можем использовать цикл for -each для обхода Map<K, V> :

Map<Integer, String> map = new HashMap<>();
map.put(1, "Java");
map.put(2, "is");
map.put(3, "great!");

for (Entry<Integer, String> entry : map.entrySet()) {
System.out.println(
"number: " + entry.getKey() +
" - " +
"Word: " + entry.getValue());
}

Точно так же мы можем использовать цикл for -each для перебора различных других структур данных в Java.

Однако, если массив или коллекция имеют значение null , возникает исключение NullPointerException :

int[] numbers = null;
for (int number : numbers) {
System.out.print(number + " ");
}

Приведенный выше код генерирует исключение NullPointerException :

Exception in thread "main" java.lang.NullPointerException
at com.foreach.core.controlstructures.loops.ForEachLoop.traverseArray(ForEachLoop.java:63)
..

Следовательно, мы должны проверить, является ли массив или коллекция нулевыми , прежде чем передавать их в цикл for -each.

Цикл for -each вообще не выполняется, если массив или коллекция пусты.

3.4. Плюсы и минусы

Цикл for -each является одной из важных функций, представленных в Java 5. Однако он также имеет свои преимущества и недостатки.

Преимущества цикла for -each:

  • Это помогает нам избежать ошибок программирования.
  • Это делает код точным и читабельным.
  • Это проще реализовать.
  • Это позволяет избежать возможности бесконечного цикла.

Из-за этих преимуществ мы предпочитаем цикл for -each циклу for , особенно при работе с массивами или коллекциями.

Недостатки цикла for -each:

  • Мы не можем перепрыгнуть через элемент, поскольку он проходит через каждый элемент.
  • Обход в обратном порядке невозможен.
  • Мы не можем изменить массив, если используем цикл for -each.
  • Невозможно следить за индексом.
  • Он имеет некоторые накладные расходы по сравнению с циклом for.

4. Вывод

В этой статье мы рассмотрели цикл for -each в Java, а также его синтаксис, работу и примеры. Наконец, мы увидели его преимущества и недостатки.

Как всегда, код этих примеров доступен на GitHub .