Тождествен ли в Java цикл «for each» циклу «for»?

Имеем массив строк:
String[] fruits = new String[] { "Orange", "Apple", "Pear", "Strawberry" };

Ппопробуем вывести его так:
for (String fruit : fruits) {
    // выводим fruit
}

И так:
for (int i = 0; i < fruits.length; i++) {
    String fruit = fruits[i];
    // выводим fruit
}

Вопрос заключается в следующем:
Существует ли гарантия (зафиксированная в документации Java или где-то еще), что порядок вывода элементов массива будет идентичным - то есть цикл for each будет гарантированно идти по порядку?

Насколько я помню, в Python это совсем не обязательно и пользоваться таким способом не рекомендуется, так как Python может брать элементы в том порядке, в каком ему удобно, наплевав на очередность.

А как в Java обстоит с этим дело? Есть ли какие-нибудь рекомендации на этот счет?
  • Вопрос задан
  • 568 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Во-первых, вы плохо помните. В Python списки - это упорядоченная коллекция и соответственно итерация по ним проходит последовательно с сохранение порядка.

Во-вторых, цикл foreach в Java - это синтаксический сахар, который при компиляции будет развёрнут в
for (Iterator i = fruits.iterator(); i.hasNext();)  {
       String fruit = i.next();
      ...
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Iloveski
Порядок элементов при итерировании определяется контрактом реализации коллекции. Что касается циклов for, то порядок для одной и той же коллекции в for и foreach отличаться не будет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы