java 中for 与 for each的比较
2017-02-20 00:00
92 查看
摘要: java 遍历
对于java中的遍历方式我相信大家都不陌生。每个人应该都能说出几种遍历方式。
NO1.最常用,也是最开始接触到的遍历方式。
NO2.最生僻,属于基本不怎么用的方式。
NO3.最简洁,语法糖方式。
对于以上的三种方式,在此主要讨论NO1与NO3的遍历方式。
对于for 与 for each的遍历的效率我们应该区别对待。
以下是对长度为10,000的ArrayList与LinkedList 分别以 for与foreach进行测试
以下是对长度为100,000的ArrayList与LinkedList 分别以 for与foreach进行测试
通过遍历ArrayList 与 LinkedList 我们可以发现:
1.用for each 遍历的时候,ArrayList 与 LinkedList的效率相差不大。
2.用for 遍历的时候,ArrayList 的效率大大优于 LinkedList的效率。
具体我们可以反编译for each查看其实现。
foreach反编译前
foreach反编译结果
由此我们可以知道foreach的遍历其实与NO2.差不多,这种遍历很适合LinkedList。而for循环遍历LinkedList需要遍历链表。成本自让就上升了。
在不知道遍历List具体实现的时候,采用foreach遍历效率最优。
当然到了这里你以为就完了吗?并没有,对于采用for循环我们可以在循环中改变List的结构。但是对于foreach循环,如果在循环中改变结构,则会出现
ConcurrentModificationException异常。
对于在循环中要改变List结构的循环,只能采用for遍历。
对于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 |
单位(ms) | for | for each |
ArrayList | 9 | 10 |
LinkedList | 5655 | 14 |
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遍历。
相关文章推荐
- C# 与 C 、 C++ 、 D 、 Java 的性能比较(二)
- 比较两种php调用Java对象的方法
- Java中对HashMap的深度分析与比较
- Java中字符串比较的注意点
- C#与C++,JAVA的比较
- Java中字符串比较的注意点
- Java Collections---HashMap深度分析与比较(zt)
- C++与Java语法比较
- Java 中对文件的读写操作之比较
- C++、Java/C#之比较
- JAVA 的interface观念 与C++ 多重继承的比较
- Java Collections---HashMap深度分析与比较
- Java Collections---HashMap深度分析与比较
- 挺有意思的比较,JAVA与C#。
- Java Web Application的最新技术比较与体会
- Java中初学者比较爱出错的运算问题
- JAVA、.NET二大平台之比较
- java做的比较完善的FTP连接上传下载文件
- CPP的未来(主要与JAVA的比较)
- 现在看的《c#技术内幕》与过去看的《Think In Java》两者的比较