Pessoal, continuo meio intrigado com o for each
Ele foi criado para ser usado apenas com arrays e collections ou alguem utiliza ele dessa maneira? Como ele pode percorrer todas as posicoes de uma array sem eu dar seus devidos indices e sem chamar nenhum metodo? :shock:
Ele é para arrays e para coisas que implementem a interface Iterable. A interface Collection herda de Iterable, logo funciona para Collections.
Na verdade isso é um “syntatic sugar”, o compilador gera sozinho o código que faz a iteração. Desta forma o programador não precisa se preocupar de como iterar e sim o compilador se preocupa com isso.
Praticamente quando voce compila isso
List<Object> s = //sua lista
for(Object obj : s){
System.out.printlln(obj.toString());
}
O compilador faz isso:
List<Object> s = //sua lista
Iterator<Object> iterator = s.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.printlln(obj.toString());
}
Não lembro direito se é assim… mas é basicamente isso.
Obrigado victorwss e Mark_Ameba, agora consegui intender!
[quote=Mark_Ameba]Praticamente quando voce compila isso
List<Object> s = //sua lista
for(Object obj : s){
System.out.printlln(obj.toString());
}
O compilador faz isso:
List<Object> s = //sua lista
Iterator<Object> iterator = s.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
System.out.printlln(obj.toString());
}
Não lembro direito se é assim… mas é basicamente isso.[/quote]
Praticamente isso mesmo.
O único problema de usar o for melhorado é que ele não te dá o iterator pra você, significando que não dá pra remover itens da coleção enquanto a iteramos, entre outras coisas.
Já há algumas discussões sobre arrumar isso, uma extensão p/ esse for:
for (String s : list : it)
É capaz de vermos isso no futuro.