Как работает Java для каждого цикла?

Вы можете использовать Collections#sort для сортировки в алфавитном порядке.

1403
задан Jay R. 23 February 2018 в 13:21
поделиться

9 ответов

for (Iterator<String> i = someIterable.iterator(); i.hasNext();) {
    String item = i.next();
    System.out.println(item);
}

Примечание, что, если необходимо использовать i.remove(); в цикле или получить доступ к фактическому итератору в некотором роде, Вы не можете использовать for ( : ) идиома, начиная с фактического итератора, просто выведено.

, Как был отмечен Denis Bueno, этот код работы для любого объекта, который реализует Iterable интерфейс .

кроме того, если правая сторона for (:) идиома array, а не Iterable объект, внутренний код использует международный индексный счетчик и проверки по сравнению с array.length вместо этого. Посмотрите Спецификация языка .

Java
1111
ответ дан Sotirios Delimanolis 23 February 2018 в 13:21
поделиться
for (Iterator<String> itr = someList.iterator(); itr.hasNext(); ) {
   String item = itr.next();
   System.out.println(item);
}
11
ответ дан Roger Lindsjö 23 February 2018 в 13:21
поделиться

Вот эквивалентное выражение.

for(Iterator<String> sit = someList.iterator(); sit.hasNext(); ) {
    System.out.println(sit.next());
}
9
ответ дан Hank 23 February 2018 в 13:21
поделиться

Цикл foreach в Java использует базовый механизм итератора. Таким образом, это идентично следующему:

Iterator<String> iterator = someList.iterator();

while (iterator.hasNext()) {
  String item = iterator.next();
  System.out.println(item);
}
37
ответ дан Peter Mortensen 23 February 2018 в 13:21
поделиться

Также обратите внимание, что использование "foreach" метода в исходном вопросе действительно имеет некоторые ограничения, такие как неспособность удалить объекты из списка во время повторения.

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

9
ответ дан billjamesdev 23 February 2018 в 13:21
поделиться

Это подразумевается ответом nsayer, но стоит отметить что OP's (..) синтаксис будет работать, когда "someList" будет что-либо , который реализует java.lang. Повторяемый - это не должен быть список или некоторый набор от java.util. Даже Ваши собственные типы, поэтому, могут использоваться с этим синтаксисом.

23
ответ дан Peter Mortensen 23 February 2018 в 13:21
поделиться

Это выглядело бы примерно так. Очень неработоспособный.

for (Iterator<String> i = someList.iterator(); i.hasNext(); )
        System.out.println(i.next());

существует хорошая рецензия на для каждого в документация Sun .

6
ответ дан Peter Mortensen 23 February 2018 в 13:21
поделиться

Java "для - каждая" конструкция цикла позволит повторению более чем два типа объектов:

  • T[] (массивы любого типа)
  • java.lang.Iterable<T>

Эти Iterable<T> интерфейс имеет только один метод: Iterator<T> iterator(). Это работает над объектами типа Collection<T>, потому что эти Collection<T> интерфейс расширяется Iterable<T>.

20
ответ дан Ryan Delucchi 23 February 2018 в 13:21
поделиться

Конструкция для каждого также допустима для массивов. например,

String[] fruits = new String[] { "Orange", "Apple", "Pear", "Strawberry" };

for (String fruit : fruits) {
    // fruit is an element of the `fruits` array.
}

, который чрезвычайно эквивалентен из [1 110]

for (int i = 0; i < fruits.length; i++) {
    String fruit = fruits[i];
    // fruit is an element of the `fruits` array.
}

Так, полная сводка:
[nsayer] следующее является более длинной формой того, что происходит:

for(Iterator<String> i = someList.iterator(); i.hasNext(); ) {
  String item = i.next();
  System.out.println(item);
}

Примечание это, если необходимо использовать i.remove (); в Вашем цикле или доступе фактический итератор в некотором роде, Вы не можете использовать для (:) идиома, так как фактический Итератор просто выведен.

[Denis Bueno]

Это подразумевается ответом nsayer, но стоит отметить что OP's (..) синтаксис будет работать, когда "someList" будет чем-либо, что реализует java.lang. Повторяемый - это не должен быть список или некоторый набор от java.util. Даже Ваши собственные типы, поэтому, могут использоваться с этим синтаксисом.

471
ответ дан Peter Mortensen 23 February 2018 в 13:21
поделиться
Другие вопросы по тегам:

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