Iterator vs for extendido

Ola pessoa, boa noite :slight_smile: !! bom já tem um tempo que estou usando o for extendido com arrays mas me perguntei por que passei a utiliza-lo no lugar iterator, não pensei duas vezes em responder essa resposta, praticidade 8) .

Iterator<String> iter = getters.iterator();
while (o1 != null && o2 != null && iter.hasNext()) {
                String getter = iter.next();
}
...
for(String getter : getters) {}

menha pergunta é, exite alguma direfença direta entre os dois, alguma boa pratica ou expecificação direta entre o uso de um e outro?

ok, desde já agradeço e até mas :smiley:

São equivalentes. Isso é tudo synthatic sugar.

Iterable<Cachorro> matilha = ...

for (Cachorro c : matilha) {
    // faz qualquer coisa aqui
}

o compilador transforma em algo mais ou menos assim:

Iterable<Cachorro> matilha = ...

{
    Iterator<Cachorro> $i1 = matilha.iterator();
    if ($i1.hasNext()) {
        for (Cachorro c = $i1.next(); $i1.hasNext(); c = $i1.next()) {
            // faz qualquer coisa aqui
        }
    }
}

No caso de arrays, ele faz algo parecido também.

É interessante utilizar-se o for aprimorado quando possível, porque deixa o design pattern mais transparente, o que significa código mais limpo, mais legível e menos propenso a erros de codificação.

Então, o que fiz foi trocar seis por meia-duzia :wink:
Muito obrigado pela resposta!!! 8)

Caro colega;

deixo um exemplo do Iterator Design Pattern que desenvolvi:

http://pedroabs.wordpress.com/2010/12/23/iterator-design-pattern-por-debaixo-dos-panos/