Item 46. for 문보다는 for-each문을 사용하라.
for(Element e : elements){
    doSomething(e);
}

for-each문으로는 컬렉션과 배열뿐 아니라, Iterable인터페이스를 구현하는 어떤 객체도 순회할 수 있다.

public interface Iterable<E>{
    // iterable 인터페이스를 확장한 클래스 안에 있는 원소들에 대한 반복자 반환
    Iterator<E> iterator();
}

for-each문을 적용할수 없는 경우

  1. 필터링(filtering) : 컬렉션을 순회하다가 특정한 원소를 삭제할 필요가 있다면, 반복자를 명시적으로 사용해야 한다. 반복자의 remove함수를 호출해야 하기 때문이다.
  2. 변환(transforming) : 리스트나 배열을 순회하다가 그 원소 가운데 일부 또는 전부의 값을 변경해야 한다면, 원소의 값을 수정하기 위해서 리스트 반복자나 배열 첨자가 필요하다.
  3. 병렬순회(parallel iteration) : 여러 컬렉션을 병렬적으로 순회해야 하고, 모든 반복자나 첨자 변수가 발맞춰 나아가도록 구현해야 한다면 반복자나 첨자 변수를 명시적으로 제어할 필요가 있다.