博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第46条:for-each循环优先于传统的for循环
阅读量:6069 次
发布时间:2019-06-20

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

for-each循环通过完全隐藏迭代器或者索引变量,避免混乱和出错的可能,适用于集合和数组和任何实现Iterable接口的对象。

 

使用传统for循环,容易出错:

enum Face { ONE, TWO, THREE, FOUR, FIVE, SIX }Collection
faces = Arrays.asList(Face.values());for(Iterator
i = faces.iterator(); i.hasNext();) for(Iterator
j = faces.iterator(); j.hasNext();) System.out.println(i.next() + " " + j.next());

期望打印出36个组合,实际上只打印出6个组合

 

修正:

enum Face { ONE, TWO, THREE, FOUR, FIVE, SIX }Collection
faces = Arrays.asList(Face.values());for(Iterator
i = faces.iterator(); i.hasNext();) Face face = i.next(); for(Iterator
j = faces.iterator(); j.hasNext();) System.out.println(face + " " + j.next());

 

使用嵌套for-each循环更简洁:

for(Face face1 : faces)    for(Face face2 : faces)        System.out.println(face1 + " " + face2);

 

无法使用for-each循环的情况:

1.过滤,需要遍历集合并删除选定的元素,需要显式的迭代器,以便调用它的remove方法

2.转换,需要遍历列表或者数组,并取代它部分或者全部元素值,需要列表迭代器或者数组索引,以便设定元素的值

3.平行迭代,并行地遍历多个集合,需要显式地控制迭代器或者索引变量,以便所有迭代器和索引变量都可以得到同步前移(像上述第一个代码 块那样)

转载于:https://www.cnblogs.com/13jhzeng/p/5755020.html

你可能感兴趣的文章
Oracle临时表空间满了的解决办法
查看>>
四部曲
查看>>
LINUX内核调试过程
查看>>
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>
2019年春季学期第四周作业
查看>>
paip.提升性能---并行多核编程哈的数据结构list,set,map
查看>>
[转]mongodb与mysql相比的优缺点
查看>>
未在本地计算机上注册“Microsoft.Ace.OleDb.12.0”提供程序解决办法
查看>>
PHP and java
查看>>
sharepoint 2010 自定义页面布局
查看>>
〖Linux〗Android NDK调用已编译好的C/C++动态连接库(so文件)
查看>>
MD5编码工具类 MD5Code.java
查看>>
VB.NET TextBox 只允许输入1-100之间的整数 简洁篇
查看>>
UNIX网络编程读书笔记:端口号、套接口对和套接口
查看>>
数值积分初步
查看>>
ADS错误the session file 'C:\user\username\default-1-2-0-0.ses' could not be loaded解决办法
查看>>
在MVC应用程序中,怎样删除上传的文件
查看>>
asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法...
查看>>
localForage——轻松实现 Web 离线存储
查看>>