最近看到项目上有这样的语句
Iterator it = list.iterator(); while (it.hasNext()) { objects = (Object[]) iter.next(); }
瞬间感觉比起自己的for循环语句高端大气了不少,但此刻又有疑问,到底这两种那种比较好
先拿出for循环来对比
for(int i=0;i <list.size();i++){ objects = (Object[])list.get(i); }
经过查询,查到了很多,现在来分享一下
一方面从简洁程度和可复用的角度,迭代器的方法必然比较轻松 ,比如当前list的组织结构变化,不能用get()函数获取,则需要重新更改for循环代码,而迭代器不用,故这是开发爱好者比较喜欢的一种代码方式
至于效率方面,找到了一位大神的测试分析http://bbs.csdn.net/topics/250025827
现在拷贝一些关键数据
以下是 3 组测试结果: [code=BatchFile]List Type Time(nanoseconds) ------------------------------------------------- ArrayList for 1189258 ArrayList Iterator 2365594 LinkedList for 152396254 LinkedList Iterator 2340801 List Type Time(nanoseconds) ------------------------------------------------- ArrayList for 1235701 ArrayList Iterator 4249982 LinkedList for 149825606 LinkedList Iterator 2525531 List Type Time(nanoseconds) ------------------------------------------------- ArrayList for 1198267 ArrayList Iterator 2584617 LinkedList for 150382451 LinkedList Iterator 2347994 [/code]
这里可以看出当用linkedlist的方式时用iterator明显好很多
这时又有人提出,可以用foreach来编写,这样更加简略
List <String> list = new ArrayList <String>(); for (String s:list) { System.out.println(s); }
这时,本着比对的态度,网上进行了查阅,首先从java forEach实现原理可以参见下文http://blog.csdn.net/a596620989/article/details/6930479
我们可以看到foreach其实就是迭代器,而且多加了一个一个检查
但foreach又有什么坏处呢
通过http://lavasoft.blog.51cto.com/62575/53321/
我们可以看到结论:
foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。提倡能用foreach的地方就不要再用for了。在用到对集合或者数组索引的情况下,foreach显得力不从心,这个时候是用for语句的时候了。