3

当我看到这篇文章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;
}

}

4

1 回答 1

6

您链接的页面特别指出:

使用 ArrayList,手写计数循环大约快 3 倍(使用或不使用 JIT),但对于其他集合,增强的 for 循环语法将完全等同于显式迭代器的使用。

因此,您应该默认使用增强的 for 循环,但考虑使用手写计数循环进行性能关键ArrayList迭代。

您使用的是 ArrayList,因此您得到的结果似乎与此语句相当一致。

于 2013-05-29T23:37:53.850 回答