Я предпочитаю
1) Если мне нужно продвигаться по списку без каких-либо изменений в объекте List, для читаемого и чистого кода я буду использовать:
for(MyClass mc : list){
/* code without modification to list */
}
2) Если мне нужно изменить объект List, я без сомнения буду использовать:
iter = list.iterator();
while(iter.hasNext()) {
MyClass mc = iter.next()
/* code without modification to list */
/* code with modification to list */
}
Дополнительная информация:
Итератор будет полезен, если вам нужно создать служебный методкоторые могут проходить через несколько типов коллекций (например, ArrayList, LinkedList, HashSet, TreeSet, LinkedHashSet)
public class Example {
public static void iterateAndDoSomething(Iterator<MyClass> iter) {
while(iter.hasNext()) {
MyClass mc = iter.next();
/* code without modification to list */
/* code with modification to list */
}
}
public static void main(String[] args) {
ArrayList<MyClass> als = new ArrayList<MyClass>();
TreeSet<MyClass> tss = new TreeSet<MyClass>();
iterateAndDoSomething(als.iterator());
iterateAndDoSomething(tss.iterator());
}
}