您的位置:首页 > 编程语言 > Java开发

java 中for 与 for each的比较

2017-02-20 00:00 92 查看
摘要: java 遍历

对于java中的遍历方式我相信大家都不陌生。每个人应该都能说出几种遍历方式。

NO1.最常用,也是最开始接触到的遍历方式。

for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + ",");
}

NO2.最生僻,属于基本不怎么用的方式。

Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + ",");
}

NO3.最简洁,语法糖方式。

for (Integer i : list) {
System.out.print(i + ",");
}

对于以上的三种方式,在此主要讨论NO1与NO3的遍历方式。

对于for 与 for each的遍历的效率我们应该区别对待。

以下是对长度为10,000的ArrayList与LinkedList 分别以 for与foreach进行测试

单位(ms)forfor each
ArrayList36
LinkedList679
以下是对长度为100,000的ArrayList与LinkedList 分别以 for与foreach进行测试

单位(ms)forfor each
ArrayList910
LinkedList565514
通过遍历ArrayList 与 LinkedList 我们可以发现:

1.用for each 遍历的时候,ArrayList 与 LinkedList的效率相差不大。

2.用for 遍历的时候,ArrayList 的效率大大优于 LinkedList的效率。

具体我们可以反编译for each查看其实现。

foreach反编译前

for (Integer i : list) {
System.out.println(i);
}

foreach反编译结果

Integer i;
for(Iterator iterator = list.iterator(); iterator.hasNext(); System.out.println(i)){
i = (Integer)iterator.next();
}

由此我们可以知道foreach的遍历其实与NO2.差不多,这种遍历很适合LinkedList。而for循环遍历LinkedList需要遍历链表。成本自让就上升了。

在不知道遍历List具体实现的时候,采用foreach遍历效率最优。

当然到了这里你以为就完了吗?并没有,对于采用for循环我们可以在循环中改变List的结构。但是对于foreach循环,如果在循环中改变结构,则会出现

ConcurrentModificationException异常。

对于在循环中要改变List结构的循环,只能采用for遍历。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java for for each 遍历