Java 8 представила другой тип цикла for
. Это дает нам третий способ их использования. Вы могли бы подумать, что выпуск другого способа использования цикла предполагает, что он должен быть лучше других. Но это не так, у каждого из них есть тонкие различия, а это значит, что вам следует немного подумать, прежде чем решить, какой из них использовать.
Типы циклов for:
- Обычный
для
цикла для каждого
цикла- Java 8
для каждого
цикл
Нормальный для цикла
Теперь я просто собираюсь прямо сказать это. Эти петли выглядят уродливо, и я стараюсь держаться от них как можно дальше. В любом случае, теперь, когда я сказал, давайте вернемся к объяснению того, что это такое. Этот тип цикла использует счетчик для перебора элементов списка или массива. Самый простой способ объяснить это – на примере.
Listlist = Arrays.asList(1,2,3,4,5,6); for(int index=0; index
Выше показано, как выполнять итерацию как по списку, так и по массиву. Это делается путем увеличения значения счетчиков index
и извлечения элемента в этой позиции с помощью list.get(index)
или array[index]
. После того, как у него есть элемент, он может делать с ним все, что захочет. Преимущество использования этого типа циклов заключается в том, что у вас больше контроля над тем, как вы считываете элементы, чем при использовании других типов циклов. Если бы вы хотели, вы могли бы очень легко извлечь элемент в позиции index-1
, просто не забудьте обработать сценарий index
или у вас на руках будет IndexOutOfBoundsException
. Это преимущество элемента управления также является его недостатком, поскольку вам нужно вручную извлекать нужные вам элементы, из-за чего код выглядит загроможденным. Уродство этого цикла не встречается в других типах циклов.
Цикл для каждого
Название этого цикла в значительной степени подводит итог тому, что он делает. Для каждого элемента в коллекции или массиве сделайте с ним что-нибудь. Нет необходимости увеличивать список с помощью счетчика, так как все это делается за кулисами. Просто укажите объект, который вы хотите получить, введите его и назовите, и все готово.
Listlist = Arrays.asList(1,2,3,4,5,6); for(int number : list) { System.out.println("I have read the number:" + number); } int[] array = new int[]{ 1,2,3,4,5,6}; for(int number : array) { System.out.println("I have read the number: " + number); } Set set = new HashSet<>(Arrays.asList(1,2,3,4,5,6)); for(int number : set) { System.out.println("I have read the number: " + number); }
Посмотрите, какие они простые и красивые, намного приятнее, чем эти уродливые петли выше. В любом случае циклы будут проходить через элементы и во время каждой итерации предоставлять определенной переменной значение из коллекции или массива. Порядок, в котором извлекаются значения, соответствует тому же порядку, в котором элементы находятся в коллекции или массиве. Еще одним преимуществом цикла for-each
является то, что он может выполнять итерации по элементам Set
, поскольку у него нет собственного метода get()
.
Цикл Java 8 для каждого
Это новый цикл for
, который был добавлен с выпуском Java 8. Он обладает всеми характеристиками обычного цикла for-each
, но использует лямбда-выражения для определения того, что он делает с каждым элементом, который он перебирает из коллекции, хотя эта форма не может использоваться в массиве. Приведенный ниже пример довольно понятен сам по себе.
Listlist = Arrays.asList(1,2,3,4,5,6); list.forEach(number -> System.out.println("I have read the number:" + number));
Используя эту форму цикла for
of, можно использовать вместо обычного цикла for-each
, поскольку функционально они одинаковы, но синтаксис отличается. Эта форма выглядит лучше для простых лямбда-выражений и может позволить определить цикл в одной строке, если выражение достаточно мало. Хотя для циклов с большим количеством операторов внутри них это предпочтение пользователей, в котором for-each
цикл, который они используют, поскольку преимущества уменьшения объема написанного кода больше нет `
Итак, какой цикл вы должны использовать? Если вам нужен полный контроль над элементами, которые вы читаете, или вам нужно добавлять и удалять элементы из списка, тогда подойдет обычный цикл for
. Если вам просто нужно выполнить некоторые инструкции для элементов списка и вам не нужно добавлять или удалять элементы, тогда используйте как обычный for-each
, так и Java 8 для каждого
циклов будет достаточно. Определение того, какой цикл for-each
использовать, зависит от вас, лично для особых или меньших операторов я бы использовал цикл Java 8 for-each
, но для циклов с более длинными операторами внутри тогда старый добрый обычный for-each
будет моим циклом выбора.
Оригинал: “https://dev.to/lankydandev/which-for-loop-pa1”