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