foreach的用法(转)

JDK1.5加入的增强for和循环.

foreach语句使用总结

增强for(part1:part2){part3};

part2中是一个数组对象,或者是带有泛性的集合. 
part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的. 
part3当然还是循环体.

foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。

foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。

foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。

foreach的语句格式:

for(元素类型t 元素变量x : 遍历对象obj){

     引用了x的java语句;

}

下面通过两个例子简单例子看看foreach是如何简化编程的。代码如下:

一、foreach简化数组和集合的遍历

import java.util.Arrays; 
import java.util.List; 
import java.util.ArrayList;

public class TestArray { 
public static void main(String args[]) { 
TestArray test = new TestArray(); 
test.test1(); 
test.listToArray(); 
test.testArray3();

}

/** 
* foreach语句输出一维数组 
*/ 
public void test1() { 
//定义并初始化一个数组 
int arr[] = {2, 3, 1}; 
System.out.println("----1----排序前的一维数组"); 
for (int x : arr) { 
System.out.println(x); //逐个输出数组元素的值 
}

//对数组排序 
Arrays.sort(arr);

//利用java新特性for each循环输出数组 
System.out.println("----1----排序后的一维数组"); 
for (int x : arr) { 
System.out.println(x); //逐个输出数组元素的值 

}

/** 
* 集合转换为一维数组 
*/ 
public void listToArray() { 
//创建List并添加元素 
List<String> list = new ArrayList<String>(); 
list.add("1"); 
list.add("3"); 
list.add("4");

//利用froeach语句输出集合元素 
System.out.println("----2----froeach语句输出集合元素"); 
for (String x : list) { 
System.out.println(x); 
}

//将ArrayList转换为数组 
Object s[] = list.toArray();

//利用froeach语句输出集合元素 
System.out.println("----2----froeach语句输出集合转换而来的数组元素"); 
for (Object x : s) { 
System.out.println(x.toString()); //逐个输出数组元素的值 

}

/** 
* foreach输出二维数组测试 
*/ 
public void testArray2() { 
int arr2[][] = {{4, 3}, {1, 2}}; 
System.out.println("----3----foreach输出二维数组测试"); 
for (int x[] : arr2) { 
for (int e : x) { 
System.out.println(e); //逐个输出数组元素的值 


}

/** 
* foreach输出三维数组 
*/ 
public void testArray3() { 
int arr[][][] = { 
{{1, 2}, {3, 4}}, 
{{5, 6}, {7, 8}} 
};

System.out.println("----4----foreach输出三维数组测试"); 
for (int[][] a2 : arr) { 
for (int[] a1 : a2) { 
for (int x : a1) { 
System.out.println(x); 




}

运行结果:

----1----排序前的一维数组 



----1----排序后的一维数组 



----2----froeach语句输出集合元素 



----2----froeach语句输出集合转换而来的数组元素 



----4----foreach输出三维数组测试 







8

Process finished with exit code 0

二、foreach语句的局限性

通过上面的例子可以发现,如果要引用数组或者集合的索引,则foreach语句无法做到,foreach仅仅老老实实地遍历数组或者集合一遍。下面看一个例子就明白了:

public class TestArray2 {

public static void main(String args[]) { 
//定义一个一维数组 
int arr[] = new int[4]; 
System.out.println("----未赋值前输出刚刚定义的数组----"); 
for (int x : arr) { 
System.out.println(x); 
}

//通过索引给数组元素赋值 
System.out.println("----通过循环变量给数组元素赋值----"); 
for (int i = 3; i > 0; i--) { 
arr[i] = i; 

//循环输出创建的数组 
System.out.println("----赋值后,foreach输出创建好的数组----"); 
for (int x : arr) { 
System.out.println(x); 


}

运行结果:

----未赋值前输出刚刚定义的数组---- 




----通过循环变量给数组元素赋值---- 
----赋值后,foreach输出创建好的数组---- 



3

Process finished with exit code 0

三、总结

foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。提倡能用foreach的地方就不要再用for了。在用到对集合或者数组索引的情况下,foreach显得力不从心,这个时候是用for语句的时候了。foreach一般结合泛型使用

时间: 2024-11-05 20:46:39

foreach的用法(转)的相关文章

js中forEach的用法

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>forEach的用法</title></head><body><span id="number"></span><input type="text" id="

Mybatis 学习---${ }与#{ }获取输入参数的区别、Foreach的用法

一.Mybatis中用#{}和${}获取输入参数的区别 1."#{}"和"${}"都可以从接口输入中的map对象或者pojo对象中获取输入的参数值.例如 1 <mapper namespace="com.hh.dao.UserDao"> 2 <select id="selectByIdList" resultType="com.hh.domain.SysUser"> 3 select

php中(foreach)用法介绍

foreach ($array as $key => $value) foreach    仅能用于数组,每次循环中,当前单元的键名也会在每次循环中被赋给变量    $key.当前单元的值被赋给 $value    并且数组内部的指针向前移一步. <?php $arr=array(0=>"你好",1=>"世界",2=>"朋友"); //var_dump($arr); foreach ($arr as $key=>

$.each()和$().each(),以及forEach()的用法

1.forEach是js中遍历数组的方法,如下 var arr=[1,2,3,4];arr.forEach(function(val,index,arr){//val为数组中当前的值,index为当前值的下表,arr为原数组 arr[index]=2*val;});console.log(arr);//结果是修改了原数组,为每个数乘以2 2.$.each()是jquery中遍历数组的方法,如下 var arr=[1,2,3,4];$.each(arr,function(i,n){ alert("

es5中foreach的用法

HTML代码: <p id="result"></p> JS代码: var eleResult = document.getElementById("result"); if (!window.console) { window.console = {}; } console.log = function(result) { var text = document.createTextNode(result), br = document.c

jstl中&lt;c:forEach&gt;的用法

在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出.现在,通过JSTL的迭代标签可以在很大的程度上简化迭代操作. JSTL所支持的迭代标签有两个,分别是<c:forEach>和<c:forTokens>.在这里介绍的是<c:forEach>标签. 简单点说,<c:forEach>标签的作用就是迭代输出标签内部的内容.它既可以进行

C#中foreach的用法

foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组. foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用. 嵌入语句为数组或集合中的每个元素继续执行.当为集合中的所有元素完成迭代后,控制传递给 foreach 块之后的下一个语句. 可以在 foreach 块的任何点使用 break 关键字跳出循环,或使用 continue 关键字直接进入循环的下一轮迭代. foreach 循环还可以通过 goto.return 或 throw 语

mybatis 查询sql时foreach使用法

找到俩个例子摘下来 sql查询用户in传list参数 <select id="getEmpsByConditionForeach" resultType="com.test.beans.Employee"> SELECT * FROM tb1_emplyee WHERE id IN <foreach collection="list" item="item_id" separator=","

xsl:foreach的用法

<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My C