【转】java foreach 使用

 
foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。
 
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。
 
foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为“foreach”语句。从英文字面意思理解foreach也就是“for 每一个”的意思。实际上也就是这个意思。
 
foreach的语句格式:
  1. for(元素类型t 元素变量x : 遍历对象obj){
  2. 引用了xjava语句;
  3. }
下面通过两个例子简单例子看看foreach是如何简化编程的。代码如下:
 
一、foreach简化数组和集合的遍历
  1. import java.util.Arrays;
  2. import java.util.List;
  3. import java.util.ArrayList;
  4.  
  5. /**
  6. * Created by IntelliJ IDEA.
  7. * User: leizhimin
  8. * Date: 2007-12-3
  9. * Time: 16:58:24
  10. * Java5新特征之foreach语句使用总结
  11. */
  12. public class TestArray {
  13. public static void main(String args[]) {
  14. TestArray test = new TestArray();
  15. test.test1();
  16. test.listToArray();
  17. test.testArray3();
  18.  
  19. }
  20.  
  21. /**
  22. * foreach语句输出一维数组
  23. */
  24. public void test1() {
  25. //定义并初始化一个数组
  26. int arr[] = {2, 3, 1};
  27. System.out.println("----1----排序前的一维数组");
  28. for (int x : arr) {
  29. System.out.println(x); //逐个输出数组元素的值
  30. }
  31.  
  32. //对数组排序
  33. Arrays.sort(arr);
  34.  
  35. //利用java新特性for each循环输出数组
  36. System.out.println("----1----排序后的一维数组");
  37. for (int x : arr) {
  38. System.out.println(x); //逐个输出数组元素的值
  39. }
  40. }
  41.  
  42. /**
  43. * 集合转换为一维数组
  44. */
  45. public void listToArray() {
  46. //创建List并添加元素
  47. List<String> list = new ArrayList<String>();
  48. list.add("1");
  49. list.add("3");
  50. list.add("4");
  51.  
  52. //利用froeach语句输出集合元素
  53. System.out.println("----2----froeach语句输出集合元素");
  54. for (String x : list) {
  55. System.out.println(x);
  56. }
  57.  
  58. //将ArrayList转换为数组
  59. Object s[] = list.toArray();
  60.  
  61. //利用froeach语句输出集合元素
  62. System.out.println("----2----froeach语句输出集合转换而来的数组元素");
  63. for (Object x : s) {
  64. System.out.println(x.toString()); //逐个输出数组元素的值
  65. }
  66. }
  67.  
  68. /**
  69. * foreach输出二维数组测试
  70. */
  71. public void testArray2() {
  72. int arr2[][] = {{4, 3}, {1, 2}};
  73. System.out.println("----3----foreach输出二维数组测试");
  74. for (int x[] : arr2) {
  75. for (int e : x) {
  76. System.out.println(e); //逐个输出数组元素的值
  77. }
  78. }
  79. }
  80.  
  81. /**
  82. * foreach输出三维数组
  83. */
  84. public void testArray3() {
  85. int arr[][][] = {
  86. {{1, 2}, {3, 4}},
  87. {{5, 6}, {7, 8}}
  88. };
  89.  
  90. System.out.println("----4----foreach输出三维数组测试");
  91. for (int[][] a2 : arr) {
  92. for (int[] a1 : a2) {
  93. for (int x : a1) {
  94. System.out.println(x);
  95. }
  96. }
  97. }
  98. }
  99. }

运行结果:

  1. ----1----排序前的一维数组
  2. 2
  3. 3
  4. 1
  5. ----1----排序后的一维数组
  6. 1
  7. 2
  8. 3
  9. ----2----froeach语句输出集合元素
  10. 1
  11. 3
  12. 4
  13. ----2----froeach语句输出集合转换而来的数组元素
  14. 1
  15. 3
  16. 4
  17. ----4----foreach输出三维数组测试
  18. 1
  19. 2
  20. 3
  21. 4
  22. 5
  23. 6
  24. 7
  25. 8
  26.  
  27. Process finished with exit code 0
二、foreach语句的局限性
 
通过上面的例子可以发现,如果要引用数组或者集合的索引,则foreach语句无法做到,foreach仅仅老老实实地遍历数组或者集合一遍。下面看一个例子就明白了:
 
  1. /**
  2. * Created by IntelliJ IDEA.
  3. * User: leizhimin
  4. * Date: 2007-12-3
  5. * Time: 17:07:30
  6. * foreach语句的局限性
  7. */
  8. public class TestArray2 {
  9.  
  10. public static void main(String args[]) {
  11. //定义一个一维数组
  12. int arr[] = new int[4];
  13. System.out.println("----未赋值前输出刚刚定义的数组----");
  14. for (int x : arr) {
  15. System.out.println(x);
  16. }
  17.  
  18. //通过索引给数组元素赋值
  19. System.out.println("----通过循环变量给数组元素赋值----");
  20. for (int i = 3; i > 0; i--) {
  21. arr[i] = i;
  22. }
  23. //循环输出创建的数组
  24. System.out.println("----赋值后,foreach输出创建好的数组----");
  25. for (int x : arr) {
  26. System.out.println(x);
  27. }
  28. }
  29. }
运行结果:
  1. ----未赋值前输出刚刚定义的数组----
  2. 0
  3. 0
  4. 0
  5. 0
  6. ----通过循环变量给数组元素赋值----
  7. ----赋值后,foreach输出创建好的数组----
  8. 0
  9. 1
  10. 2
  11. 3
  12.  
  13. Process finished with exit code 0
三、总结
 

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

 
 
 
 
 

java 中for each语句的更多相关文章

  1. Java中的switch语句后面的控制表达式的数据类型

    Java中的switch语句后面的控制表达式的数据类型 1.byte 2.char 3.short 4.int 5.枚举类型 6.Java 7允许java.lang.String类型

  2. Java中return的语句

    1.return语句的作用:a.返回一个值,这个值可以是任意类型.b.使程序返回到操作系统(即终止程序)2.java中对于一个函数,不论有没有返回值类型,都可以带有return 语句.但是区别在于,r ...

  3. Java中的return语句使用总结

    Java中的return语句总是和方法有密切关系,return语句总是用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句).   在 ...

  4. Java中的if-else语句——通过示例学习Java编程(7)

      作者:CHAITANYA SINGH 来源:https://www.koofun.com/pro/kfpostsdetail?kfpostsid=18 当我们需要根据一个条件执行一组语句时,我们需 ...

  5. Java中关于static语句块的理解

    Java中关于static语句块的理解 一.static块会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法. 实例一 public class A{ String name ...

  6. Java基础知识强化19:Java中switch分支语句

    java中switch语句: 这里expression控制表达式的数据类型只能是byte.short.char.int四种整型类型和枚举类型,不能是boolean类型: Java7(1.7)改进了sw ...

  7. Java中的forin语句

    forin的原理 forin语句是JDK5版本的新特性,在此之前,遍历数组或集合的方法有两种:通过下标遍历和通过迭代器遍历.先举个例子: @Test public void demo() { Stri ...

  8. Java中的switch语句——通过示例学习Java编程(8)

    作者:CHAITANYA SINGH 来源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=19 当我们在代码逻辑中有多个选项,而且需要为每个选 ...

  9. 【视频+图文】带你快速掌握Java中含break语句的双重for循环

    双重for循环掌握后,我们就一起来看看双重for循环的进阶内容一之带break语句的双重for循环. 双重for循环[视频+图文]讲解传输门:点击这里可去小乔的哔哩哔哩观看~ 带continue语句的 ...

  10. Java中的结构语句

    目录 循环语句 While循环 do...While循环 for循环 增强型for语句 条件语句 if..else语句 if...else if...else 语句 嵌套的 if-else 语句 sw ...

随机推荐

  1. Unity中各个平台的预编译的运用方式

    1,unity中官方文档的一个操纵关键词   Platform Dependent Compilation 2,常用的预编译关键词    UNITY_EDITOR    编辑器调用.UNITY_STA ...

  2. XML简介

    xml的简介(了解) * eXtensible Markup Language:可扩展标记型语言                       ** 标记型语言:html是标记型语言          ...

  3. jsf简介

    JSF实现了基于web的以下三个梦想 1.java程序员不必顾虑HTTP的细节,可以按照原本熟悉的事件驱动模型来设计后台系统,并通过一个能担保数据类型无误的数据传递接口将后台系统与前台界面结合在一起. ...

  4. Linux下,telnet命令如何退出

    测试连接本地的memcached telnet 链接后是这样的: wangkongming@Vostro ~ $ telnet Trying 127.0.0.1... Connected to 127 ...

  5. mysql 导入sql文件,source命令

    转自:http://blog.sina.com.cn/s/blog_610997850100mwv8.html 今天碰到个问题要用phpmyadmin导入1G的数据,但是在怎么都导入不了,用命令行就可 ...

  6. TP框架整合Swagger UI接口文档

    1.下载swagger ui:http://swagger.io/swagger-ui/: 2.在应用目录里新建一个目录xxx:如图 3.解压后把dist目录的所有文件拷贝到新建的目录里面: 4.在新 ...

  7. 关于JS的几点TIPS

    作为前端基本工作每天都会用到JS...但是我们对JS真的都了解吗,或者说有什么tips是我们不知道的呢.. So..此文关于JS的几点tips..... 一:定时器(可传多个参数) 首先是一个一般的定 ...

  8. Linux运维初级教程(一)Shell脚本

    序,掌握shell脚本是linux运维工程师的最基础技能. 一.脚本语言 与高级语言不通,脚本语言运行时需要调用相应的解释器来翻译脚本中的内容. 常见的脚本语言有Shell脚本.Python脚本.ph ...

  9. java httpclient发送json 请求 ,go服务端接收

    /***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOEx ...

  10. ajax浅析---UpdatePanel

    使用UpdatePanel控件 UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何 ...