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输出三维数组测试 









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输出创建好的数组---- 





Process finished with exit code 0
 
三、总结
 

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

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

  1. Mybatis动态SQL——if,where,trim,choose,set.foreach的用法

    知识点:主要介绍mybatis中,动态sql中的if,where,trim,set,foreach的用法 自学谷粒学院mybatis学习视频,参考mybatis官方文档 java包:log4j.jar ...

  2. jstl标签forEach的用法--遍历java的集合

    再讲<c:forEach>之前,现讲一下让EL表达式生效的语句 <% @ page isELIgnored="false"%>这句语句在你想让EL表达式生效 ...

  3. 【转载】PHP中foreach的用法

    http://www.php.cn/php-weizijiaocheng-399438.html 很好用的PHP中foreach的用法详解,收藏!

  4. AngularJS中forEach的用法

    AngularJS中当我们需要遍历某个数组的时候,我们会用到forEach语法.AngularJS中forEach的用法如下: angular.forEach(array,function(obj,i ...

  5. mybatis中foreach的用法(转)

    foreach一共有三种类型,分别为List,[](array),Map三种. foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.inf ...

  6. Java集合框架(一)—— Collection、Iterator和Foreach的用法

    1.Java集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...

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

    一.Mybatis中用#{}和${}获取输入参数的区别 1.“#{}“和“${}”都可以从接口输入中的map对象或者pojo对象中获取输入的参数值.例如 <mapper namespace=&q ...

  8. JS中forEach的用法

    forEach是ES5中操作数组的一种方法,主要功能是遍历数组,例如: 1 2 var arr = [1,2,3,4]; arr.forEach(alert); 等价于: 1 2 3 4 var ar ...

  9. 【mybatis 的foreach的用法】

    foreach一共有三种类型,分别为List,[](array),Map三种. foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.inf ...

  10. foreach的用法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

随机推荐

  1. java 对象初始化和代码块初始化顺序

    class A { public A(){ System.out.println("测试!!!!!!!!!!!"); } } class Demo19 extends A { { ...

  2. js如何关闭当前页,而不弹出提示框

    //关闭当前页面,并且打开新页面,(不提示) function closeWinAndOpen(url) { //利用随机数处理WinName var sWinName = "LR" ...

  3. SQL Server 模式和名称解析

    模式实际上是名称空间,因此在SQL Serve中调用数据库对象时,一定要设置对象引用的环境.每个用户都被赋予了一个默认模式,在用户登录SQL Server并凋用数据库对象时,这个默认模式就是对象引用方 ...

  4. UIDeviceOrientation UIInterfaceOrientation 区别

    UIDeviceOrientation      是机器硬件的当前旋转方向   这个你只能取值 不能设置 UIInterfaceOrientation   是你程序界面的当前旋转方向   这个可以设置 ...

  5. 原创+部分引用啦:C# Winform界面中的分隔线问题

    C sharp 中Winform中的控件很多,一个小小的问题居然会绕上一个小弯子,做界面的时候, 你需要在界面上弄一条分隔线,把相关的功能分隔开来,结果原来在其它 IDE编辑器里很容易实现的这个功能, ...

  6. 转:Dictionary<int,string>怎么获取它的值的集合?急!急!急!

    怎么获取Dictionary<int, string>的值?我知道这个是键值对的,我知道可以根据key得到value,但关键是现在连key也不知道啊就是想让这个显示在listbox中,应该 ...

  7. hadoop官网介绍及如何下载hadoop(2.4)各个版本与查看hadoop API介绍

    1.如何访问hadoop官网?2.如何下载hadoop各个版本?3.如何查看hadoop API? 很多同学开发都没有二手资料,原因很简单觉得不会英语,但是其实作为软件行业,多多少少大家会英语的,但是 ...

  8. [Leetcode] Search In Rotated Sorted Array (C++)

    题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7  ...

  9. nodejs的简单服务器程序

    下面是参考<Jquery.Jquery UI 及Jquery Mobile>一书中的nodej服务器程序 var http = require('http'), url = require ...

  10. Bootstrap3 formテキストフィールド横幅の指定の仕方

    Bootstrap3を使ってて.フォームの横幅を変えたいなって時ありませんか??Bootstrap3のフォームの横幅のデフォルトはwidth:100%で設定されています.ですので.普通にフォームを使用 ...