Нет, цикл for-each
не отслеживает индекс. Вы можете использовать обычный индексированный цикл или сделать что-то вроде этого:
int idx = 0;
for (Object o : list) {
...
idx++;
}
Это рискованно, поскольку break
/ continue
приведет к тому, что idx
выйдет из синхронизации, поэтому используйте это редко, и только когда тело простое и имеет длину всего несколько строк.
Если элементы различны, List.indexOf
также будет работать, хотя и на O(N)
, и в этот момент вы можете рассмотреть Set
(неупорядоченный, но гарантированно отличный).
Следует также сказать, что иногда использование listIterator()
также устраняет необходимость явного индекса при итерации.
A ListIterator
поддерживает операции add
, set
и remove
.
Это еще одно явное преимущество List
над массивами в том, что касается механизма итерации.