使用增强型For循环语法输出较慢的结果

时间:2013-05-29 23:33:33

标签: java android

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

}

1 个答案:

答案 0 :(得分:6)

您特别链接的页面指出:

  

使用ArrayList,手写计数循环的速度提高约3倍   (有或没有JIT),但对于其他集合,增强的for循环   语法将完全等效于显式迭代器的使用。

     

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

你正在使用一个ArrayList,所以你得到的结果似乎与这个陈述相当一致。