Все эти петли делают то же самое, я просто хочу показать их, прежде чем бросить свои два цента.
Во-первых, классический способ перебора List:
for (int i=0; i < strings.size(); i++) { }
Во-вторых, предпочтительный способ, поскольку он менее подвержен ошибкам (сколько раз ВЫ делали «упс, смешали переменные i и j в этих циклах внутри циклов»?).
for (String s : strings) { }
В-третьих, микрооптимизированный цикл for:
int size = strings.size();
for (int i = -1; ++i < size;) { }
Теперь фактические два цента: по крайней мере, когда я их тестировал, третий был самым быстрым при подсчете миллисекунд того, сколько времени потребовалось для каждого типа цикла, когда простая операция в нем повторялась несколько миллионов раз - это было с использованием Java 5 с jre1.6u10 в Windows, если кому-то интересно.
Хотя, по крайней мере, кажется, что третий является самым быстрым, вы действительно должны спросить себя, хотите ли вы рискнуть реализовать эту оптимизацию глазка повсюду в вашем циклическом коде, поскольку, как я видел, на самом деле цикл не является t обычно самая трудоемкая часть любой реальной программы (или, может быть, я просто работаю не в том поле, кто знает). И также, как я уже упоминал в предлоге для цикла Java for-each (некоторые называют его циклом Iterator, а другими - циклом for-in ), вы с меньшей вероятностью столкнетесь с этой конкретной глупой ошибкой при ее использовании. И прежде чем обсуждать, как это может быть даже быстрее, чем другие, помните, что javac вообще не оптимизирует байт-код (ну, почти вообще), он просто компилирует его.
Если вы занимаетесь микрооптимизацией и / или ваше программное обеспечение использует множество рекурсивных циклов и тому подобное, то вас может заинтересовать третий тип цикла. Просто не забудьте хорошо протестировать свое программное обеспечение как до, так и после смены цикла for на этот странный, микрооптимизированный.