2 first class first_class 于 2016.04.08 18:55 提问

请问一下,为什么后者的执行时间比前者的更长?

public class For_Test {

public static void main(String[] args) {
    List list = new ArrayList();

    for(int i=0; i<100000; i++){
        list.add(1);
    }
    long start = System.currentTimeMillis();
    for(int i=0; i<list.size(); ++i){
        for(int j=0; j<list.size(); j++){
            for(int k=0; k<list.size(); k++){
                int a = 0;
            }
        }
    }
    System.out.println(System.currentTimeMillis() - start);

    start = System.currentTimeMillis();
    int j = list.size();
    System.err.println(j);
    for(int i=0; i<j; i++){
        for(int k=0; k<j; k++){
            for(int a=0; a<j; a++){
                int b = 0;
            }
        }
    }

    System.out.println(System.currentTimeMillis() - start);
}

}


4个回答

caozhy
caozhy   Ds   Rxr 2016.04.10 05:55

两者的时间应该一样长,如果第二个长,应该是误差。也许你觉得调用size()会变慢,那是你的误解。因为你可以看size方法的源代码
public int size()
{
return size;
}
它不是数出来的,而是返回的成员变量size。而且jvm进一步对它内联了,所以实际上执行的机器码和第一个程序是一样的。

broust
broust   2016.04.08 23:24

执行了N次,互有输赢。而且循环100000*100000*100000次,相差+-20ms,误差范围内吧

evil9999
evil9999   2016.04.09 09:30

把前面的++i改成i++试试,应该是这个原因吧。

CSDNXIAON
CSDNXIAON   2016.04.10 02:11

sql 执行时间
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!