----------------------android培训、java培训、期待与您交流!----------------------

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;   /**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2007-12-3
* Time: 16:58:24
* Java5新特征之foreach语句使用总结
*/
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);   }   }   }   }
}

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

/**
* Created by IntelliJ IDEA.
* User: leizhimin
* Date: 2007-12-3
* Time: 17:07:30
* 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);   }   }
}
运行结果:<PRE class=java name="code">----未赋值前输出刚刚定义的数组----
0
0
0
0
----通过循环变量给数组元素赋值----
----赋值后,foreach输出创建好的数组----
0
1
2
3
</PRE>
<BR>三、总结
<BR>
<BR>foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。提倡能用foreach的地方就不要再用for了。在用到对集合或者数组索引的情况下,foreach显得力不从心,这个时候是用for语句的时候了。foreach一般结合泛型使用
<BR>
<BR>

【黑马程序员】 【转载】foreach循环 ---------BY elleniou相关推荐

  1. 黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入

    ------- android培训.java培训.期待与您交流! ---------- 黑马程序员-----集合框架类(四) 高级for循环.方法的可变参数及静态导入 1.1 高级for循环(示例1) ...

  2. 黑马 程序员——Java基础---流程控制

    黑马程序员--Java基础---流程控制 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ 一.概述 Java提供了两种基本的流程控制结构:分支结构 ...

  3. 黑马程序员:从零基础到精通的前端学习路线

    黑马程序员:从零基础到精通的前端学习路线 随着互联网的深入发展,前端开发工程师一跃成为市场上非常抢手的人才.很多同学,包括以前做UI的.Java的.或者对于IT完全零基础的同学都想学习前端.下图是网上 ...

  4. 黑马程序员入学Java知识——精华总结

    黑马程序员入学Java知识--精华总结 J2SE部分,Java高新技术部分,7K面试题部分等黑马入学要求的知识点总结! 一.黑马程序员-java概述与基础知识 6 1.何为编程? 6 2.Java语言 ...

  5. [置顶] 黑马程序员 -- 多线程

    黑马程序员 -- 多线程 polk601001 星期五, 15/06/2012 - 17:14 发布 什么是多线程? 多线程就是使程序并发(同时)执行几个操作. .NET 框架类库在System.Th ...

  6. JVM入门笔记-摘自黑马程序员

    JVM笔记 这是一篇JVM小白的入门笔记,适合刚接触JVM的伙伴们入门参考. 笔记是完全按照我看的视频来的,说实话内容不深很好理解,主要的作用就是把所有的知识点串起来让你不会迷茫,就像画画一样先描好轮 ...

  7. 黑马程序员Java教程学习笔记(五)

    学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(五) 日期时间:Date.Sim ...

  8. 黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

    黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合 ...

  9. 黑马程序员 oc对象的方法成员变量

    -----------黑马程序员 IOS培训.Android培训.Java培训.期待与您交流---------------- #import <Foundation/Foundation.h&g ...

  10. 黑马程序员——c语言学习心得——函数传递二维数组

    黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.    变量 ...

最新文章

  1. activiti no processes deployed with key
  2. webpackPlugin插件总结
  3. NOIP2017年11月9日赛前模拟
  4. 基于深度学习的中文语音识别系统框架(pluse)
  5. 文件传输-对数据进行加解密的方法!
  6. 全栈语音交互方案免费开放,这次扔开源炸弹的是Rokid
  7. (寻找第K小的数amp;amp;寻找第K小的数的和)
  8. 1.1 WEB API 在帮助文档页面进行测试
  9. zrender源码分析4--初始化Painter绘图模块2
  10. python语言程序设计实践教程陈东_《Python语言程序设计实践教程》陈东著【摘要 书评 在线阅读】-苏宁易购图书...
  11. QPressEvent实现双击ctrl快捷键
  12. 如何快速批量新建文本文档(txt)?
  13. JDBC下载及连接数据库处理
  14. 利用MATLAB实现Sobel边缘检测
  15. css样式,鼠标移动上去变成禁用、小手等样式。
  16. python3 输出 26个大小写英文字母
  17. 解决:mmc0: error -110 whilst initialising SD card.md
  18. OS学习笔记-7(清华大学慕课)实验二物理内存管理
  19. 十年前你绝对没有看懂的《大话西游》.
  20. nginx反向代理websocket 小坑

热门文章

  1. 「B站焊武帝」再出圈!孤身爆肝造CPU,软硬件全自研,可玩游戏,基础器件成本不到1000元...
  2. C#中的线程池使用(一)
  3. DataGrid的使用实践
  4. HTML和CSS制作跳动的心
  5. 诶。小弟落难了。碰到个无语的需求。。。
  6. 进程隐藏之API HOOK
  7. 2020年化工自动化控制仪表考试资料及化工自动化控制仪表操作证考试
  8. 网络编程:1. 网络IO与select
  9. 第二幅“码绘”——创意自画像
  10. python红楼梦_用Python读红楼