Java循环方式测试

看Android官方的性能优化视频看到一个优化点,因为之前一直以为类似如下的循环方式才是性能最佳的:

1
2
3
for (int i : mDatas) {
int m = i;
}

结果出乎意料。

下面贴下三种循环方式:

第一种

1
2
3
for (int i = 0; i < mDatas.size(); i++) {
int m = mDatas.get(i);
}

大部分人会用这种,对于一个100,000级别的列表,耗时300ms。

第二种

1
2
3
for (int i : mDatas) {
int m = i;
}

忘了是Java的哪一个版本开始支持的这种循环方式,简单明了,也让我一度认为是最佳实践,性能怎么样呢?
同样的列表,耗时226ms,的确比第一种要快一些。

第三种

1
2
3
4
int size = mDatas.size();
for (int i = 0; i < size; i++) {
int m = mDatas.get(i);
}

这种和第一种其实就差了一点点,就是把循环体中获取size的方法拿到了循环体外,但是!对于同样的一个列表,它仅仅耗时188ms!

强行贴图

结果图

结论

我们可以得到2个知识点

  1. 循环体应该按照第三种的写法,性能最高
  2. 通过方法 return 一个private变量(也就是各种setter getter)可能会比较耗时。(因为第一和第三种的区别就仅仅是这一点)

写完收工~