当我看到这篇文章http://developer.android.com/training/articles/perf-tips.html
时,我正在阅读Google文档页面任何人都可以解释为什么我会得到相反的结果吗?
我的结果是:(平均而言) 结果1:76 结果2:73 结果3:143
我使用以下代码执行了一些测试(遍及相同的测试):
package TestPack;
import java.util.ArrayList;
public class Test
{
static ArrayList<Integer> mTheArray = new ArrayList<Integer>();
static
{
for(int i = 0; i < 10000000; i++)
{
mTheArray.add(1234234223);
}
}
static long mTimeStarted;
public static void main(String args[])
{
//Test 1.
mTimeStarted = System.currentTimeMillis();
One();
Fn.Out("Result 1: " + String.valueOf(System.currentTimeMillis() - mTimeStarted));
//Test 2.
mTimeStarted = System.currentTimeMillis();
Two();
Fn.Out("Result 2: " + String.valueOf(System.currentTimeMillis() - mTimeStarted));
//Test 3
mTimeStarted = System.currentTimeMillis();
Three();
Fn.Out("Result 3: " + String.valueOf(System.currentTimeMillis() - mTimeStarted));
}
//Slowest (But not...).
public static int One()
{
int sum = 0;
for (int i = 0; i < mTheArray.size(); ++i)
{
sum += mTheArray.get(i);
}
return sum;
}
public static int Two()
{
int sum = 0;
ArrayList<Integer> localArray = mTheArray;
int len = localArray.size();
for (int i = 0; i < len; ++i) {
sum += localArray.get(i);
}
return sum;
}
//Fastest (But actually slowest in this test).
public static int Three()
{
int sum = 0;
for (Integer a : mTheArray) {
sum += a;
}
return sum;
}
}
答案 0 :(得分:6)
您特别链接的页面指出:
使用ArrayList,手写计数循环的速度提高约3倍 (有或没有JIT),但对于其他集合,增强的for循环 语法将完全等效于显式迭代器的使用。
因此,您应该默认使用增强型for循环,但考虑手写的计数循环以进行性能关键
ArrayList
迭代。
你正在使用一个ArrayList,所以你得到的结果似乎与这个陈述相当一致。