【Java】List集合遍历分析

在 Java 中,我们应当坚持使用迭代器iterator或者forEach循环遍历 List ,因为它俩总能根据不同的类型提供最快的遍历速度。(实际上是先有了 iterator ,然后 Java 官方为了优化代码复杂度,又推出了基于 iterator 的 forEach 循环,它俩是同一种方式的不同写法)

本文将测试ArrayList集合LinkedList集合在三种循环下的遍历速度,样本容量大小为 10000 :

  1. for循环
  2. forEach循环
  3. 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)+" 毫秒");
}
}

一、结果:ArrayList

for耗时:13 毫秒
forEach耗时:10 毫秒
iterator耗时:10 毫秒

二、结果:LinkedList

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);
}
posted @   ThinkStu  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示