In a recent code review at WSO2, Afkham Azeez mentioned some java best practices. This was something I didn't knew before. There are two ways to use a java iterator. One method is using a While-loop. The other way is to use For-loop. But the first method can drive you into errors if not correctly handled. Look at the following code.
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
Iterator<String> iter = list.iterator();
while ( iter.hasNext() ){
System.out.println( iter.next() );
}
System.out.println(iter.next());
If you see carefully, now the iterator can been used outside the while-loop and it might throw NoSuchElementException as iter.hasNext() is not called, in each iter.next() call.
By using a for-loop we can avoid this by restricting the iterator to be accessed only inside the for-loop scope.
eg -
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
for ( Iterator<String> iter = list.iterator(); iter.hasNext(); ) {
System.out.println( iter.next() );
}