Я просто натолкнулся на этот, казалось бы, безобидный комментарий, сравнив ArrayList с массивным массивом String. Это от пары лет назад, но OP пишет
Я заметил, что использование для String s: stringsList было примерно на 50% медленнее, чем использование старого цикла for-loop для доступа к списку. Перейти фигурой...
Никто не прокомментировал это в оригинальном посте, и тест казался немного сомнительным (слишком коротким, чтобы быть точным), но я чуть не упал со стула, когда я его прочитал. Я никогда не сравнивал расширенный цикл с "традиционным", но сейчас я работаю над проектом, который выполняет сотни миллионов итераций над экземплярами ArrayList с использованием расширенных циклов, поэтому это меня беспокоит.
Я собираюсь провести бенчмаркинг и опубликовать свои результаты здесь, но это, очевидно, очень беспокоит меня. Я мог бы найти малоинформационную онлайн-информацию об относительной производительности, за исключением того, что пара изредка упоминает, что усиленные циклы для ArrayLists работают намного медленнее в Android.
Кто-нибудь испытал это? Сохраняется ли такой разрыв в производительности? Я опубликую свои результаты здесь, но был очень удивлен, прочитав это. Я подозреваю, что если этот разрыв в производительности существовал, он был исправлен в более современных виртуальных машинах, но я думаю, теперь мне нужно будет провести некоторое тестирование и подтвердить.
Обновление: Я внесла некоторые изменения в свой код, но уже подозревал, что другие здесь уже указывали: уверен, что усиленный цикл медленнее, но за пределами очень простых триггеров, стоимость должна быть минимальной частью стоимости логики цикла. В моем случае, несмотря на то, что я повторяю очень большие списки строк с использованием расширенных циклов, моя логика внутри цикла достаточно сложна, что я не мог даже измерить разницу после переключения на индексированные циклы.
TL; DR: усиленные циклы действительно медленнее, чем традиционная петля на основе индексов над arraylist; но для большинства приложений разница должна быть незначительной.