Вы можете использовать Collections#sort
для сортировки в алфавитном порядке.
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
вместо этого. Посмотрите Спецификация языка .
for (Iterator<String> itr = someList.iterator(); itr.hasNext(); ) {
String item = itr.next();
System.out.println(item);
}
Вот эквивалентное выражение.
for(Iterator<String> sit = someList.iterator(); sit.hasNext(); ) {
System.out.println(sit.next());
}
Цикл foreach в Java использует базовый механизм итератора. Таким образом, это идентично следующему:
Iterator<String> iterator = someList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
System.out.println(item);
}
Также обратите внимание, что использование "foreach" метода в исходном вопросе действительно имеет некоторые ограничения, такие как неспособность удалить объекты из списка во время повторения.
новый для цикла легче считать и устраняет необходимость отдельного итератора, но только действительно применим в итеративных передачах только для чтения.
Это подразумевается ответом nsayer, но стоит отметить что OP's (..) синтаксис будет работать, когда "someList" будет что-либо , который реализует java.lang. Повторяемый - это не должен быть список или некоторый набор от java.util. Даже Ваши собственные типы, поэтому, могут использоваться с этим синтаксисом.
Это выглядело бы примерно так. Очень неработоспособный.
for (Iterator<String> i = someList.iterator(); i.hasNext(); )
System.out.println(i.next());
существует хорошая рецензия на для каждого в документация Sun .
Java "для - каждая" конструкция цикла позволит повторению более чем два типа объектов:
T[]
(массивы любого типа) java.lang.Iterable<T>
Эти Iterable<T>
интерфейс имеет только один метод: Iterator<T> iterator()
. Это работает над объектами типа Collection<T>
, потому что эти Collection<T>
интерфейс расширяется Iterable<T>
.
Конструкция для каждого также допустима для массивов. например,
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 (); в Вашем цикле или доступе фактический итератор в некотором роде, Вы не можете использовать для (:) идиома, так как фактический Итератор просто выведен.
Это подразумевается ответом nsayer, но стоит отметить что OP's (..) синтаксис будет работать, когда "someList" будет чем-либо, что реализует java.lang. Повторяемый - это не должен быть список или некоторый набор от java.util. Даже Ваши собственные типы, поэтому, могут использоваться с этим синтаксисом.