博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java增强的for循环和普通for循环对比
阅读量:6173 次
发布时间:2019-06-21

本文共 2578 字,大约阅读时间需要 8 分钟。

JDK1.5中增加了增强的for循环。

缺点:

  对于数组,不能方便的访问下标值;
  对于集合,与使用Interator相比,不能方便的删除集合中的内容(在内部也是调用Interator).
除了简单遍历并读取其中的内容外,不建议使用增强的for循环。

一、遍历数组

语法为:

for (Type value : array) {    expression value;}

//以前我们这样写:

void someFunction (){    int[] array = {1,2,5,8,9};    int total = 0;    for (int i = 0; i < array.length; i++)    {        total += array[i];     }    System.out.println(total); }

//现在我们只需这样写(和以上写法是等价的):

void someFunction (){    int[] array = {1,2,5,8,9};    int total = 0;    for (int n : array)   {         total += n;    }    System.out.println(total);}

这种写法的缺点:

 显而易见,for/in(for each)循环自动控制一次遍历数组中的每一个元素,然后将它赋值给一个临时变量(如上述代码中的int n),然后在循环体中可直接对此临时变量进行操作。这种循环的缺点是:

 1. 只能顺次遍历所有元素,无法实现较为复杂的循环,如在某些条件下需要后退到之前遍历过的某个元素;

 2. 循环变量(i)不可见,如果想知道当前遍历到数组的第几个元素,只能这样写:

int i = 0; for (int n : array) {     System.out.println("This " + i + "-th element in the array is " + n);     i++; }

二、遍历集合

 语法为:

for (Type value : Iterable) {    expression value;}

注意:for/in循环遍历的集合必须是实现Iterable接口的。

1  //以前我们这样写: 2 void someFunction () 3 { 4     List list = new ArrayList(); 5     list.add("Hello "); 6     list.add("Java "); 7     list.add("World!"); 8     String s = ""; 9     for (Iterator iter = list.iterator(); iter.hasNext();)10    {11        String temp= (String) iter.next();12        s += temp;13     }14     System.out.println(s);15  }

 

1 //现在我们这样写: 2  3 void someFunction () 4 { 5     List list = new ArrayList(); 6     list.add("Hello "); 7     list.add("Java "); 8     list.add("World!"); 9     String s = "";10     for (Object o : list)11    {12        String temp = (String) o;13        s += temp;14    }15    System.out.println(s);16 }

 

 

1 // 如果结合“泛型”,那么写法会更简单,如下: 2  void someFunction () 3 { 4     List list = new ArrayList(); 5     list.add("Hello "); 6     list.add("Java "); 7     list.add("World!"); 8     String s = ""; 9     for (String temp : list)10    {11        s += temp; //省去了对强制类型转换步骤12    }13    System.out.println(s);14 }15 //上述代码会被编译器转化为:16  void someFunction ()17 {18     List list = new ArrayList();19     list.add("Hello ");20     list.add("Java ");21     list.add("World!");22     String s = "";23     for (Iterator iter = list.iterator(); iter.hasNext(); )24    {25        String temp = iter.next();26        s += temp;27     }28     System.out.println(s);29  }

 

这种写法的缺点:

虽然对集合进行的for/in操作会被编译器转化为Iterator操作,但是使用for/in时,Iterator是不可见的,所以如果需要调用Iterator.remove()方法,或其他一些操作, for/in循环就有些力不从心了。 综上所述,Java 5.0中提供的增强的for循环——for/in(for each)循环能让我们的代码更加简洁,让程序员使用时更加方便,但是也有它的局限性,所以一定要根据实际需要有选择性地使用,不要盲目追求所谓的“新特性”。

 

转载于:https://www.cnblogs.com/DreamDrive/archive/2011/11/15/3917138.html

你可能感兴趣的文章
前端开发薪资之各地区对比(图文分析)(share)
查看>>
对做“互联网产品”的一些想法
查看>>
SPI协议及其工作原理浅析【转】
查看>>
原生js编写的安全色拾色器
查看>>
iOS:VFL语言
查看>>
让时间处理简单化 【第三方扩展类库org.apache.commons.lang.time】
查看>>
用scikit-learn学习DBSCAN聚类
查看>>
Linux设备模型(热插拔、mdev 与 firmware)【转】
查看>>
Android开发笔记第二篇(Android 手机概念)
查看>>
js隐藏与显示回到顶部按钮
查看>>
hdu4496 D-City(扭转和支票托收啊 )
查看>>
数据挖掘 | 数据理解和预处理
查看>>
关于大数据你必须了解的几个关键词!
查看>>
在Kali Linux中更改GRUB2背景的5种方式
查看>>
如何把Windows 10的“便笺”按钮从操作中心挪到开始菜单和桌面
查看>>
19 个必须知道的 Visual Studio 快捷键
查看>>
如何在Ubuntu命令行下管理浏览器书签
查看>>
《大数据分析原理与实践》一一2.1 大数据分析模型建立方法
查看>>
《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一2.7 测试套件和类型...
查看>>
8月18日云栖精选夜读:阿里视频云最强转码技术揭秘:窄带高清原理解析+用户接入指南...
查看>>