Довольно давно я заметил, что использование foreach loop в Java в методах, которые вызываются очень часто, приводит к перерасходу памяти из-за создания промежуточных итераторов. Компилятор мог бы быть и поумнее в случае со списками и не создавать этих итераторов.
Теперь я использую обычные циклы без создания промежуточных итераторов. Только вот печатать все эти циклы вручную задалбывает. Вот для чего я написал простой шаблон для автозаполнения в Eclipse:
for (int ${index} = 0; ${index} < ${collection}.size(); ${index}++) { ${type:elemType(collection)} ${name:newName(type)} = ${collection}.get(${index}); ${cursor} }
Идём в Preferences/Java/Editor/Templates и вставляем эту штуку в новый шаблон, даём ему какое-нибудь уникальное название, вроде loop, устанавливаем контекст в Java statements и закрываем.
Теперь, когда вы находитесь возле списка (вообще-то коллекции, но это ограничение системы подсказок Eclipse, она знает только об итераторах, массивах и коллециях), если напечатать loop и нажать волшебный ctrl+space, появится красивый цикл.