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

3
我正在阅读Google文档页面时,发现了这篇文章:http://developer.android.com/training/articles/perf-tips.html 有人能解释为什么我得到了相反的结果吗?
我的结果是:(平均值) 结果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个回答

6
您链接的页面明确说明:

使用ArrayList时,手写计数循环大约快3倍(无论是否启用JIT),但对于其他集合类型,增强型for循环语法将与显式迭代器用法完全等效。

因此,默认情况下应使用增强型for循环,但对于性能关键的ArrayList迭代,请考虑手写计数循环。

您正在使用ArrayList,因此您得到的结果似乎与这个说明相当一致。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接