Почему-то не нашел нормальной информации в интернете и погуглил по темам на стаковерфлоу, но так и не нашел в чем отличие for и for each в Java? Понятно что for синтаксический сахар в Java и всё то, что обычный for может реализовать, можно реализовать и на for each(e), а что еще?
Если вы используете обычные массивы с циклом for-each, то на этапе компиляции он будет преобразован в обычный цикл for с целочисленной счетчиком-переменной. Но если вы используете for-each с коллекциями, то на этапе компиляции он будет преобразован в for с итератором (что-то вроде for(Iterator it = myColl.iterator(); it.hasNext(); )
).
Наоборот всё что реализовано на foreach
можно реализовать на for
. Дело в том, что для foreach
у объекта должен быть реализован интерфейс Iterable
, как вы например выведете чётные числа от 2 до 16?
for(int i = 2; i<=16; i+=2)
System.out.println(i);
а вот через foreach
надо попариться.
Данный фрагмент:
List<String> list = Arrays.asList("1", "2", "3");
for (String str : list) {
System.out.println(str);
}
Эквивалентен записи через обычный for
таким образом:
List<String> list = Arrays.asList("1", "2", "3");
for(int i = 0; i<list.size(); ++i){
System.out.println(list.get(i));
}
Ответ @Bakuard не совсем корректен, компилятор переводит foreach
в такой байткод:
List<String> list = Arrays.asList("1", "2", "3");
Iterator var4 = list.iterator();
while(var4.hasNext()) {
String str = (String)var4.next();
System.out.println(str);
}
Предпочитайте использование for-each циклу for.
Есть книга - Эффективное программирование Java , во 2 издании это 46 статья о преимуществах цикла for-each перед for с различными примерами.
https://vk.com/doc20299052_453037470?hash=65bcfc6f8cc717c341&dl=d313b5ec8243c42f0e
Цикл for-each обладает огромным преимуществом перед for , поскольку в программировании есть некоторые моменты, в которых он довольно таки уместен и прост в использовании, например: вложенная итерация нескольких коллекций, простое выполнение итерации объектов, реализующих Iterable, также, некоторые вещи, написанные с помощью for-each проще понять благодаря визуальной простоты синтаксиса.
Однако, есть три условия , при которых цикл for-each будет бесполезен, это когда будет необходим явный итератор или индекс массива.
Если вам необходимо, могу вкинуть сюда пару примеров с различиями использования.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как сделать JProgressBar чтобы он работал на кнопку Jbutton и заканчивал работу после того как прогресс дошел до 100%?
Необходимо чтобы не весь список сразу отображался, а по очереди с 0 до listsize(), если пользователь свайпнул
У меня есть фрагмент, он хранит список CardView и допинформацию(назову ее "информация A")
Пишу API на GraphQL, с которым работает фронтэнд-приложениеНужно возвращать фронтэндеру что-то вроде status OK и error 404