Java中的通用 For 循环
当我们知道必须遍历整个集合或列表时,我们可以使用通用 For 循环。 Java 的 Generic 有一个名为for-each循环的新循环。它也称为增强的 for 循环。这个 for-each 循环可以更轻松地迭代数组或通用 Collection 类。
在普通的 for 循环中,我们写了三个语句:
for( statement1; statement 2; statement3 )
{
//code to be executed
}
语句 1在代码执行之前执行,语句 2说明执行代码要满足的条件,语句 3在代码块执行后执行。
但是如果我们查看通用 For 循环或for-each 循环,
通用 for 循环由三个参数组成:
- 迭代器函数:当需要下一个值时调用它。它接收不变状态和控制变量作为参数。返回 nil 信号以进行终止。
- 不变状态:这在迭代过程中不会改变。它基本上是迭代的主题,例如字符串、表或用户数据。
- 控制变量:代表迭代的初始值。
句法
for( ObjectType variable : iterable/array/collections ){
// code using name variable
}
相当于
for( int i=0 ; i< list.size() ; i++) {
ObjectType variable = list.get(i);
// statements using variable
}
例子:
Java
// Java program to illustrate Generic for loop
import java.io.*;
class GenericsForLoopExample {
public static void main(String[] args)
{
// create an array
int arr[] = { 120, 100, 34, 50, 75 };
// get the sum of array elements
int s = sum(arr);
// prin the sum
System.out.println(s);
}
// returs the sum of array elements
public static int sum(int arr[])
{
// initialize the sum variable
int sum = 0;
// generic for loop where var stores the integer
// value stored at every index of array
for (int var : arr) {
sum += var;
}
return sum;
}
}
Java
// Java program to demonstrate that Generic
// for loop can be used in iterating
// Collections like HashMap
import java.io.*;
import java.util.*;
class EnhancedForLoopExample {
public static void main(String[] args)
{
// create a empty hashmap
HashMap map = new HashMap<>();
// enter name/url pair
map.put("GFG", "geeksforgeeks.org");
map.put("Github", "www.github.com");
map.put("Practice", "practice.geeksforgeeks.org");
map.put("Quiz", "quiz.geeksforgeeks.org");
// using keySet() for storing
// all the keys in a Set
Set key = map.keySet();
// Generic for loop for iterating all over the
// keySet
for (String k : key) {
System.out.println("key :" + k);
}
// Generic for loop for iterating all over the
// values
for (String url : map.values()) {
System.out.println("value :" + url);
}
}
}
输出
379
示例:表明
Java
// Java program to demonstrate that Generic
// for loop can be used in iterating
// Collections like HashMap
import java.io.*;
import java.util.*;
class EnhancedForLoopExample {
public static void main(String[] args)
{
// create a empty hashmap
HashMap map = new HashMap<>();
// enter name/url pair
map.put("GFG", "geeksforgeeks.org");
map.put("Github", "www.github.com");
map.put("Practice", "practice.geeksforgeeks.org");
map.put("Quiz", "quiz.geeksforgeeks.org");
// using keySet() for storing
// all the keys in a Set
Set key = map.keySet();
// Generic for loop for iterating all over the
// keySet
for (String k : key) {
System.out.println("key :" + k);
}
// Generic for loop for iterating all over the
// values
for (String url : map.values()) {
System.out.println("value :" + url);
}
}
}
输出
key :Quiz
key :Github
key :Practice
key :GFG
value :quiz.geeksforgeeks.org
value :www.github.com
value :practice.geeksforgeeks.org
value :geeksforgeeks.org
通用 For 循环或 for-each 循环的限制:
1.当我们要修改列表时不合适。
for( Integer var : arr)
{
// only changes the var value and not the value of the data stored inside the arr
var = var + 100;
}
2.我们无法跟踪索引。
for( Integer var : arr){
if(var == target)
{
// don't know the index of var to be compared with variable target
return **;
}
}
4. 仅向前迭代一步。
// This cannot be converted to Generic for loop
for( int i = n-1 ; i >= 0 ; i-- ) {
// code
}
4.不能同时处理两个决策声明。
// This loop cannot be converted to Generic for loop
for( int i = 0; i < arr.length; i++ ) {
if( arr[i]==num )
return **;
}