第一种
for (int i = 0; i < list.size(); i++) {
}
第二种:
int n = list.size();
for (int i = 0; i < n; i++) {
}
第三种
for (int i = 0, n = list.size(); i < n; i++) {
}
第四种
for (int i = list.size(); i >= 0; i--) {
}
第五种
for (Integer i : list) {
}
第六种
foreach的变种,趋向于函数式编程
list.forEach(i -> {
});
第七种
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
}
下面我们用整形list来进行每一种写法的大概测试
写法 | n=100 | n=1000 | n=10000 | n=100000 | n=1000000 | n=10000000 |
---|---|---|---|---|---|---|
第一种 | 0 | 1 | 5 | 25 | 124 | 5118 |
第二种 | 0 | 1 | 4 | 19 | 96 | 6723 |
第三种 | 0 | 1 | 3 | 15 | 597 | 4503 |
第四种 | 0 | 0 | 4 | 19 | 83 | 1101 |
第五种 | 0 | 0 | 3 | 13 | 84 | 616 |
第六种 | 38 | 37 | 38 | 48 | 108 | 646 |
第七种 | 0 | 0 | 2 | 9 | 45 | 417 |
测试数据可能跟机器有关,结果不一定是准确的
从上面可以得出,在数据量小的时候,函数式写法相对耗时。
在百万数据以上的时候,foreach、iterator写法相对快一点。
不过一般情况下,大量数据不适合进行循环操作,一般划分成多个数据量小的进行循环操作,最后合并结果即可。