Prerequisite: Decision making in Java
For-each is another array traversing technique like for loop, while loop, do-while loop introduced in Java5.
- It starts with the keyword for like a normal for-loop.
- Instead of declaring and initializing a loop counter variable, you declare a variable that is the same type as the base type of the array, followed by a colon, which is then followed by the array name.
- In the loop body, you can use the loop variable you created rather than using an indexed array element.
- It’s commonly used to iterate over an array or a Collections class (eg, ArrayList)
Syntax:
for (type var : array)
{
statements using var;
}
Simple program with for each loop:
Java
/*package whatever //do not write package name here */ import java.io.*; class Easy { public static void main(String[] args) { // array declaration int ar[] = { 10, 50, 60, 80, 90 }; for (int element : ar) System.out.print(element + " "); } } |
Output
10 50 60 80 90
The above syntax is equivalent to:
for (int i=0; i<arr.length; i++)
{
type var = arr[i];
statements using var;
}
Java
// 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; } } |
Output
The highest score is 132
Limitations of for-each loop
decision-making
- For-each loops are not appropriate when you want to modify the array:
for (int num : marks)
{
// only changes num, not the array element
num = num*2;
}
2. For-each loops do not keep track of index. So we can not obtain array index using For-Each loop
for (int num : numbers)
{
if (num == target)
{
return ???; // do not know the index of num
}
}
3. For-each only iterates forward over the array in single steps
// 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 cannot process two decision making statements at once
// 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 also has some performance overhead over simple iteration:
Java
/*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) |
Output
For each loop :: 45 ms Using collection.size() :: 11 ms By calculating collection.size() first :: 13 ms Using [int j = list.size(); j > size ; j--] :: 15 ms
Related Articles:
For-each in C++ vs Java
Iterator vs For-each in Java
Share your thoughts in the comments

