`
yydy1983
  • 浏览: 46367 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java 5 中增强的for循环——for/in (for each)

    博客分类:
  • JAVA
阅读更多

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

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

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/in循环遍历的集合必须是实现Iterable接口的
虽然对集合进行的for/in操作会被编译器转化为Iterator操作,但是使用for/in时,Iterator是不可见的,所以如果需要调用Iterator.remove()方法,或其他一些操作, for/in循环就有些力不从心了。

遍历集合:
for/in循环遍历的集合必须是实现Iterable接口的
虽然对集合进行的for/in操作会被编译器转化为Iterator操作,但是使用for/in时,Iterator是不可见的,所以如果需要调用Iterator.remove()方法,或其他一些操作, for/in循环就有些力不从心了。

<script type="text/javascript"></script>

 

        综上所述,Java 5.0中提供的增强的for循环——for/in(for each)循环能让我们的代码更加简洁,让程序员使用时更加方便,但是也有它的局限性,所以一定要根据实际需要有选择性地使用,不要盲目追求所谓的“新特性”。

分享到:
评论

相关推荐

    Agile Java (EN)

    还有就是java5 的一些新特性,如参数化类型,for-each 循环。其实我主要是看有关java编程方面的,而测试驱动就没那么关注。从这本书中学到了很多编程技巧和规范,以及加深了对面向对象基本原理的理解。看完才知道...

    Java8 Lambda表达式和流操作如何让你的代码变慢5倍

    有许许多多关于 Java 8 中流效率的讨论,但根据 Alex Zhitnitsky 的测试结果显示:坚持使用传统的 Java 编程风格——iterator 和 for-each 循环——比 Java 8 的实现性能更佳。  Java 8 中的 Lambda 表达式和流...

    Java开发技术大全 电子版

    5.1.7for~each循环208 5.1.8应用程序示例1——数组排序209 5.1.9应用程序示例2——杨辉三角212 5.2字符串213 5.2.1String对象的声明213 5.2.2String对象的创建214 5.2.3String对象的使用214 5.2.4String类型...

    javaSE代码实例

    14.6.9 使用for-each循环遍历集合 300 14.7 映射集 301 14.7.1 Map接口及含义 301 14.7.2 HashMap类的使用 302 14.7.3 Hashtable类的使用 303 14.7.4 LinkedHashMap类的使用 304 14.7.5 SortedMap接口...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    3.2.2 for循环的变体 119 3.2.3 while循环 126 3.2.4 do-while循环 128 3.2.5 嵌套的循环 129 3.3 C++/CLI编程 132 3.4 小结 137 3.5 练习 138 3.6 本章主要内容 138 第4章 数组、字符串和指针 139 4.1 ...

    百度翻译源码java-DeepLearning:深度学习

    ——一些表征松散地基于对生物神经系统中信息处理和通信模式的解释,例如试图定义大脑中各种刺激和相关神经元React之间关系的神经编码。研究试图创建有效的学习系统这些来自大规模未标记数据集的表示。 -- 深度神经...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Apart from these, customers have to come to detection institutions personally to send samples, and they can not take effective trace of each process during detection. All of these limit the advanced ...

    jquery插件使用方法大全

    正如Using Deferreds in jQuery 1.5一文中说明的,其结果是在jQuery中能够将依赖于某个任务(事件)结果的逻辑与任务本身解耦了。这一点在JavaScript中其实并不新鲜,Mochikit和Dojo等已经实现有些日子了。由于...

    javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)

    其特点在于 —— 递归遍历时只检索子页面的 Window 对象,不立即执行回调函数,而是在检索结束后在普通循环结构中回调。这样可以尽量减少 递归调用时的内存消耗,也简化了程序结构,易于维护 全局函数 Frame_Each( ...

    JavaScript高级教程

    1.2.2 DOM..............................................5 1.2.3 BOM..............................................8 1.3 小结..............................................8 第 2 章 ECMAScript 基础..........

Global site tag (gtag.js) - Google Analytics