Remover elementos da coleção enquanto iterar

AFAIK, existem duas abordagens:

Iterar sobre uma cópia da coleçãoUse o iterador da coleção real

Por exemplo,

<code>List<Foo> fooListCopy = new ArrayList<Foo>(fooList);
for(Foo foo : fooListCopy){
    // modify actual fooList
}
</code>

e

<code>Iterator<Foo> itr = fooList.iterator();
while(itr.hasNext()){
    // modify actual fooList using itr.remove()
}
</code>

Existe alguma razão para preferir uma abordagem sobre a outra (por exemplo, preferindo a primeira abordagem pela simples razão de legibilidade)?

questionAnswers(8)

yourAnswerToTheQuestion