Учитывается список list < /code> объект, я знаю о следующих способах зацикливания по всем элементам: < /p>
базовый для цикла (конечно, там эквивалент < /code> /do, пока < /code>) < /h3>
< /code> /do
Код: Выделить всё
// Not recommended (see below)!
for (int i = 0; i < list.size(); i++) {
E element = list.get(i);
// 1 - can call methods of element
// 2 - can use 'i' to make index-based calls to methods of list
// ...
}
< /code>
Примечание. Как указал @amarseillan, эта форма является плохим выбором
для итерации над списком < /code> s, поскольку фактическая реализация
метод Get < /code> может быть не так эффективно, как при использовании итератора < /code>. Получите элемент i-th. < /p>
В приведенном выше примере нет никакого способа для реализации < /code> к
«Сохранить свое место», чтобы сделать будущие итерации более эффективными.
для ArrayList Для получения дополнительной информации о вычислительной сложности реализаций встроенных коллекций < /code> ознакомьтесь с этим вопросом.
Код: Выделить всё
for (E element : list) {
// 1 - can call methods of element
// ...
}
< /code>
итератор < /h3>
for (Iterator iter = list.iterator(); iter.hasNext(); ) {
E element = iter.next();
// 1 - can call methods of element
// 2 - can use iter.remove() to remove the current element from the list
// ...
}
< /code>
listicerator < /h3>
for (ListIterator iter = list.listIterator(); iter.hasNext(); ) {
E element = iter.next();
// 1 - can call methods of element
// 2 - can use iter.remove() to remove the current element from the list
// 3 - can use iter.add(...) to insert a new element into the list
// between element and iter->next()
// 4 - can use iter.set(...) to replace the current element
// ...
}
< /code>
функциональная java < /h3>
list.stream().map(e -> e + 1); // Can apply a transformation function for e
< /code>
iterable.foreach, stream.foreach, ... < /h3>
(метод карты от Java 8 Stream API (см. @i_am_zero ответ). Фореш Arrays.asList(1,2,3,4).forEach(System.out::println);
// 1 - can call methods of an element
// 2 - would need reference to containing object to remove an item
// (TODO: someone please confirm / deny this)
// 3 - functionally separates iteration from the action
// being performed with each item.
Arrays.asList(1,2,3,4).stream().forEach(System.out::println);
// Same capabilities as above plus potentially greater
// utilization of parallelism
// (caution: consequently, order of execution is not guaranteed,
// see [Stream.forEachOrdered][stream-foreach-ordered] for more
// information about this).
< /code>
Какие еще есть способы, если таковые имеются?>
Подробнее здесь: https://stackoverflow.com/questions/184 ... st-in-java