+-
java – 使用增强型For循环语法输出较慢的结果
当我看到这篇文章 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;
}

}

最佳答案
您链接的页面明确指出:

With an ArrayList, a hand-written counted loop is about 3x faster
(with or without JIT), but for other collections the enhanced for loop
syntax will be exactly equivalent to explicit iterator usage.

So, you should use the enhanced for loop by default, but consider a hand-written counted loop for performance-critical ArrayList iteration.

您正在使用ArrayList,因此您获得的结果似乎与此语句完全一致.

点击查看更多相关文章

转载注明原文:java – 使用增强型For循环语法输出较慢的结果 - 乐贴网