遍历方式
# 测试数据构造
List<Integer> list = new ArrayList<>();
int n = 10000_0000;
for (int i = 0; i < n; i++) {
list.add(i);
}
# for i 循环
for (int i = 0; i < list.size(); i++) {
list.get(i);
}
# 增强for循环
for (int item list) {
}
# iterator for 循环
for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {
iterator.next();
}
# iterator while 循环
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
iterator.next();
}
# list.forEach 循环
list.forEach(item -> {
});
# list.stream().forEach 循环
list.stream().forEach(item -> {
});
# list.parallelStream().forEach 循环
list.parallelStream().forEach(item -> {
});
10000_0000次循环性能比较
循环类型 | 第1轮 | 第2轮 | 第3轮 | 第4轮 | 第5轮 |
---|
for i 循环 | 75 ms, 6.08% | 53 ms, 8.62% | 68 ms, 10.64% | 54 ms, 8.39% | 53 ms, 6.79% |
增强for循环 | 146 ms, 11.83% | 149 ms, 24.23% | 164 ms, 25.67% | 185 ms, 28.73% | 163 ms, 20.90% |
iterator for 循环 | 56 ms, 4.54% | 54 ms, 8.78% | 58 ms, 9.08% | 56 ms, 8.70% | 77 ms, 9.87% |
iterator while 循环 | 55 ms, 4.46% | 56 ms, 9.11% | 56 ms, 8.76% | 56 ms, 8.70% | 55 ms, 7.05% |
list.forEach 循环 | 555 ms, 44.98% | 115 ms, 18.70% | 111 ms, 17.37% | 109 ms, 16.93% | 130 ms, 16.67% |
list.stream().forEach 循环 | 143 ms, 11.59% | 115 ms, 18.70% | 108 ms, 16.90% | 107 ms, 16.61% | 112 ms, 14.36% |
list.parallelStream().forEach 循环 | 203 ms, 16.45% | 71 ms, 11.54% | 71 ms, 11.11% | 73 ms, 11.34% | 187 ms, 23.97% |
参考
Java 中 List 的5种遍历方式