0%

for和foreach速度比较

for和foreach的运行效率对比

for循环

编译器不做任何处理

1
2
3
4
5
6
7
8
9
10
11
12
// 编译之前
ArrayList<Integer> list = new ArrayList<>();
for(int i = 0; i <list.size();i++){
Integer a = list.get(i);
System.out.println(a);
}
// 编译之后
Integer a;
for(int i = 0; i < list.size(); ++i) {
a = (Integer)list.get(i);
System.out.println(a);
}

每次都需要去比较一次有没有越界,而且每次都要去获取循环变量

foreach

编译过后使用的是迭代器

1
2
3
4
5
6
7
8
9
10
11
// 编译之前
ArrayList<Integer> list = new ArrayList<>();
for (Integer a:list) {
System.out.println(a);
}
// 编译之后
Iterator var4 = list.iterator();
while(var4.hasNext()) {
a = (Integer)var4.next();
System.out.println(a);
}

可以明显的看到foreach循环写的比for循环精简

但是假如说遍历的是linkedlist而不是arraylist,那么这个时候foreach的效率会快很多

如果有涉及到index的计算还是选用for循环比较合适