Fori、ForEach、Iteration、Stream 遍历的性能差距
测试工具JMH
一个Java比较常见的基准测试框架
测试代码
JMH结果
Score 字段标识执行时间(纳秒)
100000次循环-ArrayList-循环效率差不多-推荐使用foreach
Benchmark Mode Cnt Score Error Units
ForTest.forEach avgt 10 66822.112 ± 13119.963 ns/op
ForTest.forI avgt 10 72833.380 ± 3264.609 ns/op
ForTest.iteration avgt 10 68094.347 ± 14576.760 ns/op
ForTest.stream avgt 10 90027.396 ± 16992.545 ns/op
100000次循环-LinkedList-fori效率极低毕竟是链表结构-推荐使用foreach
Benchmark Mode Cnt Score Error Units
ForTest.forEach avgt 10 259192.188 ± 17534.537 ns/op
ForTest.forI avgt 10 3764475600.000 ± 55769659.965 ns/op
ForTest.iteration avgt 10 269880.918 ± 21829.922 ns/op
ForTest.stream avgt 10 252859.959 ± 11398.680 ns/op
结论
如果不考虑多线程循环,和一些需要index的场景,无脑推荐foreach,foreach可以减少一次显式的变量产生更加专注有效代码
forEach其实是使用iteration实现的但是iteration不方便呀