http://www.javapractices.com/topic/TopicAction.do?Id=88
Many programmers have a strong preference for using a for-each loop or an Iterator instead of a for-loop.
The traditional for-loop always uses an explicit loop index - an integer that identifies each iteration. The problem is that loop indexes have always been a fruitful source of error. For example, off-by-one errors are very common in programming, and they are often related to these loop indexes. In addition, the (somewhat unnatural) computer science tradition of starting loop indexes from 0 instead of 1 often contributes to these sorts of bugs.
Since they are more error prone, for-loops with indexes should generally be avoided, in favor of the more robust, compact, and elegant for-eachloop.
Example
import java.util.*; /** Different iteration styles. */ public class IterateNoIndex { /** * Iterating without an index is more compact and less * error prone. */ public void withoutIndex(){ //for-each loop is usually preferred List<String> trees = Arrays.asList("Maple", "Birch", "Poplar"); for(String tree: trees){ log(tree); } //Iterators are not as compact as a for-each loop //but sometimes you need them: removing/replacing items, //and 'parallel' iterations across two data structures Iterator<String> iter = trees.iterator(); while (iter.hasNext()) { log(iter.next()); } } /** Iterating with an index is more error prone. */ public void withIndex(){ //traditional for-loop for(int idx=0; idx < 10; ++idx){ log("Iteration..." + idx); } } // PRIVATE private void log(String aMessage){ System.out.println(aMessage); } }