博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 中for 与 for each的比较
阅读量:7126 次
发布时间:2019-06-28

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

hot3.png

对于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) for for each
ArrayList 3 6
LinkedList 67 9

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

单位(ms) for for each
ArrayList 9 10
LinkedList 5655 14

通过遍历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遍历。

转载于:https://my.oschina.net/weechang93/blog/841949

你可能感兴趣的文章
TCP三次握手和四次挥手图解
查看>>
基于Linux与lpc3250开发板的交叉开发环境搭建
查看>>
Android OOT STB set IP
查看>>
图文并茂详解 SQL JOIN
查看>>
tomcat 热部署和热加载 配置
查看>>
字体图标
查看>>
每天一个linux命令(60):scp命令
查看>>
linux 基本服务检测脚本
查看>>
mac下filezilla中找回存储的站点秘密
查看>>
我的友情链接
查看>>
sqlmap
查看>>
filter实现权限控制
查看>>
解放sony lt26w 电源
查看>>
Android中_TextView属性的XML详解 包括单行显示等等。
查看>>
PHP获取IP所在地区
查看>>
你的手机应用是拍出来的吗
查看>>
Maven_Repertory及npm全局模块卸载及默认安装目录修改
查看>>
android:ellipsize属性的含义
查看>>
centos7安装配置禅道7.3
查看>>
python学习之正则表达式
查看>>