foreach总结:

  foreach是java5的新特性,foreach主要是增强了for循环,在遍历数组和集合上很方便。

foreach是for循环的简化版本,但是foreach不能完全取代for循环,然而任何foreach都可以改写为for循环,foreach不是一个关键字,主要就是这个格式,每一个for的意思。

foreach语句格式:

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

    引用x的java语句;  

}

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

下面看几段代码,看看foreach的强大和简便:

/**
* 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); } } } }
}运行结果:
----1----排序前的一维数组
2
3
1
----1----排序后的一维数组
1
2
3
----2----froeach语句输出集合元素
1
3
4
----2----froeach语句输出集合转换而来的数组元素
1
3
4
----4----foreach输出三维数组测试
1
2
3
4
5
6
7
8 Process finished with exit code 0

二.使用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); } }
}运行结果:----未赋值前输出刚刚定义的数组----
0
0
0
0
----通过循环变量给数组元素赋值----
----赋值后,foreach输出创建好的数组----
0
1
2
3 Process finished with exit code 0

     总结

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

参考文章:http://www.cnblogs.com/hnrainll/archive/2011/11/13/2247422.html

Java中使用foreach带来的一些问题相关推荐

  1. java中的foreach语句

    在java中,foreach语句是for语句的特殊简化版本,在遍历数组等方面为程序员提供了很大的方便,语法格式如下: for(元素变量 x : 遍历对象 obj) { 引用了x的java语句: } f ...

  2. 在Java中的foreach循环中调用remove

    本文翻译自:Calling remove in foreach loop in Java [duplicate] This question already has an answer here: 这 ...

  3. java中的foreach

    foreach 并不是java中的关键字,是for语句的特殊简化版,在比那里数组,集合时,foreach更加简单快捷,从字面上的意思理解 foreach 也就是 " for每一个 " ...

  4. JAVA中的foreach循环

    一.概念 foreach语句是java5的新特征之一,在遍历数组.集合方面,foreach为开发人员提供了极大的方便. foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取 ...

  5. java中的foreach用法及总结

    增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集合.  part1定义了一个局部变量,这个局部变量的类型与part2中的对象元素的类型是一致的.  ...

  6. Java中List.forEach()方法使用

    例子: //使用com.google.guava包创建集合 List list =Lists.newArrayList("a","b","c" ...

  7. Java中使用foreach遍历list的盲点,

    我们通常在项目中会用到ArrayList ,喜欢使用jdk1.5以后的foreach进行对list集合遍历,但是以下的操作会遇到小坑请看代码: public class TestListUtils { ...

  8. Java中list.forEach方法的使用示例-根据key获取对应的value

    场景 获取了字典表对象的list,每个对象的属性有key和value. 比如对象1的key=1,value=公众号 对象2的key=2,value=霸道的程序猿 现在已经获取2怎么在这个对象的List ...

  9. java中nodelist的用法_我可以在Java中使用for-each遍历一个NodeList吗?

    这个问题的解决方法是直截了当的,而且幸运的是你必须实现一次. import java.util.*; import org.w3c.dom.*; public final class XmlUtil ...

最新文章

  1. java hashmap 无序,【Java】HashMap自定义排序
  2. windows下使用net-snmp实现agent扩展(二)
  3. 蓝桥杯练习系统习题-基础训练
  4. 一些恶意软件的分析收集整理
  5. nginx动静分离配置_nginx动静分离实战
  6. static的用法及其与auto的区别小结
  7. 在.NetCore中使用Myrmec检测文件真实格式
  8. Spring WebApplicationInitializer和ApplicationContextInitializer的混淆
  9. 如何在textarea中显示html代码
  10. Info.plist与Prefix.pch修改文件位置遇到的问题及解决方法
  11. python面试题之Python支持什么数据类型?
  12. hdfs java api读写
  13. 3090显卡安装pytorch出错
  14. Kotlin实现LeetCode算法题之String to Integer (atoi)
  15. 编程之美读书笔记1.1——让CPU占用率曲线听你的指挥
  16. 25.TCP/IP 详解卷1 --- SNMP:简单网络管理协议
  17. Mac下使用Docker快速搭建pinpont追踪系统APM
  18. 自然语言处理之文本分类
  19. oracle数据类型为文本类型,Oracle 字段类型
  20. 银行mysql面试题_mysql的常见面试题

热门文章

  1. html获取元素坐标,js 获取元素相对于页面的坐标(示例)
  2. uint32是什么数据类型_C++编程基础: 4. 数据类型
  3. 面试题系列:网络篇夺命连环12问
  4. 转:VCSA 6.7 升级到VCSA7.0
  5. foxmail7 BUILD093之后再无Foxmail
  6. 消息中间件学习总结(5)——RocketMQ之Apache RocketMQ背后的设计思路与最佳实践
  7. Java基础学习总结(111)——Java虚拟机JVM总结大全
  8. android log 码率,webrtc之Android视频质量提升:保帧率降码率
  9. mac 黑窗口连接mysql_mac系统下mysql环境变量设置及远程连接
  10. hackathon活动复盘