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 .