Requisito previo: toma de decisiones en Java
For-each es otra técnica de recorrido de matrices como el bucle for, el bucle while y el bucle do- while introducido en Java5.
- Comienza con la palabra clave para como un bucle for normal.
- En lugar de declarar e inicializar una variable de contador de bucle, declara una variable que es del mismo tipo que el tipo base de la matriz, seguida de dos puntos, seguidos por el nombre de la matriz.
- En el cuerpo del bucle, puede utilizar la variable de bucle que creó en lugar de utilizar un elemento de matriz indexado.
- Se usa comúnmente para iterar sobre una matriz o una clase de Colecciones (por ejemplo, ArrayList)
Sintaxis:
for (type var : array) { statements using var; }>
Programa simple con para cada bucle:
Java
atoi c
/*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 +> ' '> );> > }> }> |
cadena en matriz java
>
>Producción
10 50 60 80 90>
La sintaxis anterior es equivalente a:
for (int i=0; i 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>maxHasta lejos) { maxHasta lejos = num; } } devuelve maxHastaFar; } } Salida La puntuación más alta es 132 Limitaciones de la toma de decisiones para cada bucle Los bucles For-each no son apropiados cuando se desea modificar la matriz: for (int num: marks) { // solo cambia el número, no el elemento de la matriz número = número*2; } 2. Los bucles For-each no realizan un seguimiento del índice. Por lo tanto, no podemos obtener el índice de la matriz usando el bucle For-Each for (int num: números) { if (num == target) { return ???; // no conozco el índice de num } } 3. For-each solo itera hacia adelante sobre la matriz en pasos individuales // no se puede convertir a un bucle for-each for (int i=numbers.length-1; i>0 ; i--) { System.out.println(números[i]); } 4. For-each no puede procesar dos declaraciones de toma de decisiones a la vez // no se puede convertir fácilmente en un bucle for-each for (int i=0; i 5. For-each también tiene cierta sobrecarga de rendimiento en comparación con la iteración simple: Java / *paquete lo que sea //no escriba el nombre del paquete aquí */ import java.io.*; import java.util.*; class GFG { public static void main (String[] args) { Lista lista = new ArrayList(); hora de inicio; hora de finalización larga para (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 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 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 = lista.get(j); } endTime = Calendar.getInstance().getTimeInMillis(); System.out.println('Usando [int j = list.size(); j> tamaño ; j--] :: ' + (endTime - startTime) + ' ms'); } } // Este código es una contribución de Ayush Choudhary @gfg(code_ayush) Salida Para cada bucle :: 45 ms Usando collection.size() :: 11 ms Calculando primero collection.size() :: 13 ms Usando [int j = lista.tamaño(); j> tamaño ; j--] :: 15 ms Artículos relacionados: For-each en C++ vs Java Iterator vs For-each en Java>