在 Java 中,我们应当坚持使用迭代器iterator或者forEach循环遍历 List ,因为它俩总能根据不同...(实际上是先有了 iterator ,然后 Java 官方为了优化代码复杂度,又推出了基于 iterator 的 forEach 循环).........
在 Java 中,我们应当坚持使用迭代器iterator或者forEach循环遍历 List ,因为它俩总能根据不同的类型提供最快的遍历速度。(实际上是先有了 iterator ,然后 Java 官方为了优化代码复杂度,又推出了基于 iterator 的 forEach 循环,它俩是同一种方式的不同写法)
本文将测试ArrayList集合与LinkedList集合在三种循环下的遍历速度,样本容量大小为 10000 :
for循环 forEach循环 iterator迭代器
public class Dog {
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
list.add(i);
}
// 1
long start1 = System.currentTimeMillis();
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}
long end1 = System.currentTimeMillis();
// 2
long start2 = System.currentTimeMillis();
for (Object obj : list) {
System.out.print(obj);
}
long end2 = System.currentTimeMillis();
// 3
long start3 = System.currentTimeMillis();
Iterator<Object> iterator = list.iterator();
while (iterator.hasNext()){
System.out.print(iterator.next());
}
long end3 = System.currentTimeMillis();
// 时间
System.out.println();
System.out.println("for耗时:" + (end1 - start1)+" 毫秒");
System.out.println("forEach耗时:" + (end2 - start2)+" 毫秒");
System.out.println("iterator耗时:" + (end3 - start3)+" 毫秒");
}
}
for耗时:13 毫秒
forEach耗时:10 毫秒
iterator耗时:10 毫秒
for耗时:67 毫秒
forEach耗时:11 毫秒
iterator耗时:11 毫秒
可以看到,使用forEach循环和使用iterator迭代器的效果是一样的,实际上编译器会把 forEach 循环编译成 for + iterator 循环;同时单纯的for循环的性能较差,所以我们应当坚持使用iterator迭代器或者forEach循环遍历 List。
编译前
List<String> list = List.of("Apple", "Orange", "Pear");
for (String s : list) {
System.out.println(s);
}
编译后
List<String> list = List.of("Apple", "Orange", "Pear");
for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
String s = it.next();
System.out.println(s);
}
本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!
本站主要用于日常笔记的记录和生活日志。本站不保证所有内容信息可靠!(大多数文章属于搬运!)如有版权问题,请联系我立即删除:“abcdsjx@126.com”。
QQ: 1164453243
邮箱: abcdsjx@126.com