Pré-requisito: tomada de decisão em Java
For-each é outra técnica de passagem de array como for loop, loop while e loop do-while introduzidos em Java5. 
 

  • Ele começa com a palavra-chave for como um loop normal.
  • Em vez de declarar e inicializar uma variável de contador de loop, você declara uma variável que é do mesmo tipo que o tipo base do array, seguido por dois pontos, que é seguido pelo nome do array.
  • No corpo do loop, você pode usar a variável de loop criada em vez de usar um elemento de matriz indexado. 
     
  • É comumente usado para iterar sobre uma matriz ou uma classe de coleções (por exemplo, ArrayList)

Sintaxe: 

for (type var : array) 
{ 
    statements using var;
}

é equivalente a: 
 

for (int i=0; i<arr.length; i++) 
{ 
    type var = arr[i];
    statements using var;
}
// Java program to illustrate
// for-each loop
class For_Each    
{
    public static void main(String[] arg)
    {
        {
            int[] marks = { 125, 132, 95, 116, 110 };
             
            int highest_marks = maximum(marks);
            System.out.println("The highest score is " + highest_marks);
        }
    }
    public static int maximum(int[] numbers)
    {
        int maxSoFar = numbers[0];
         
        // for each loop
        for (int num : numbers)
        {
            if (num > maxSoFar)
            {
                maxSoFar = num;
            }
        }
    return maxSoFar;
    }
}

Saída: 
 

The highest score is 132

Limitações da 
       tomada de decisão para cada ciclo

  1. Os loops For-each não são apropriados quando você deseja modificar a matriz :
     
for (int num : marks) 
{
    // only changes num, not the array element
    num = num*2; 
}

       2. Os loops For-each não acompanham o índice . Portanto, não podemos obter o índice da matriz usando o loop For-Each 
 

for (int num : numbers) 
{ 
    if (num == target) 
    {
        return ???;   // do not know the index of num
    }
}

        3. For-each apenas itera para a frente sobre a matriz em etapas únicas 
 

// cannot be converted to a for-each loop
for (int i=numbers.length-1; i>0; i--) 
{
      System.out.println(numbers[i]);
}

        4. For-each não pode processar duas declarações de tomada de decisão ao mesmo tempo 
 

// cannot be easily converted to a for-each loop 
for (int i=0; i<numbers.length; i++) 
{
    if (numbers[i] == arr[i]) 
    { ...
    } 
}

        5. For-each também tem alguma sobrecarga de desempenho em relação à iteração simples: 

/*package whatever //do not write package name here */
 
import java.io.*;
import java.util.*;
 
class GFG {
    public static void main (String[] args) {
        List<Integer> list = new ArrayList<>();
        long startTime;
        long endTime;
        for (int i = 0; i < 1000000; i++) {
            list.add(i);
        }
        // Type 1
        startTime = Calendar.getInstance().getTimeInMillis();
        for (int i : list) {
            int a = i;
        }
        endTime = Calendar.getInstance().getTimeInMillis();
        System.out.println("For each loop :: " + (endTime - startTime) + " ms");
         
        // Type 2
        startTime = Calendar.getInstance().getTimeInMillis();
        for (int j = 0; j < list.size(); j++) {
            int a = list.get(j);
        }
        endTime = Calendar.getInstance().getTimeInMillis();
        System.out.println("Using collection.size() :: " + (endTime - startTime) + " ms");
         
        // Type 3
        startTime = Calendar.getInstance().getTimeInMillis();
        int size = list.size();
        for (int j = 0; j < size; j++) {
            int a = list.get(j);
        }
        endTime = Calendar.getInstance().getTimeInMillis();
        System.out.println("By calculating collection.size() first :: " + (endTime - startTime) + " ms");
     
        // Type 4
        startTime = Calendar.getInstance().getTimeInMillis();
        for(int j = list.size()-1; j >= 0; j--) {
            int a = list.get(j);
        }
        endTime = Calendar.getInstance().getTimeInMillis();
        System.out.println("Using [int j = list.size(); j > size ; j--] :: " + (endTime - startTime) + " ms");
    }
}
 
// This code is contributed by Ayush Choudhary @gfg(code_ayush)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="374" src="https://www.youtube.com/embed/DUVqtwVJ3DI?feature=oembed" width="665"></iframe>

? list = PLqM7alHXFySF5ErEHA1BXgibGg7uqmA4_ 
Artigos relacionados:  
For-each em C++ vs Java  
Iterator vs For-each em Java
Este artigo foi contribuído por Abhishek Verma . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contribute.geeksforgeeks.org ou enviar o seu artigo para contribute@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.