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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
《明解C语言》示例代码和练习代码[第2章]
《明解C语言》,作者:柴田望洋。书中第2章的示例代码和练习代码。
java.sql.Date类和java.util.Date类的使用
package com.ly; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class TestMain {
java中的简单的字符串大小比较方法——compareto方法的详细介绍
原文链接:在java编程中,我们会偶尔遇到字符串大小比较的问题,compareTo()方法很简单就实现这种功能。该方法用于判断一个字符串是大于、等于还是小于另一个字符串。判断字符串大小的依据是根据它们在字典中的顺序决定的。    语法:Str1.compareTo(Str2);    其返回的是一个int类型值。若Str1等于参数字符串Str2字符串,则返回0;若该Str1按字典顺序小于参数字符串...
《明解C语言》笔记及课后习题答案 【第二章】
练习2-1/*---显示前者是后者的百分之几---*/ #include &amp;lt;stdio.h&amp;gt; int main(void) { int a,b; puts(&quot;请输入两个整数。&quot;); printf(&quot;整数x:&quot;); scanf(&quot;%d&quot;,&amp;amp;a); printf(&quot;整数y:&quot;); scanf(&quot;%d&quot;,&amp;amp;b); printf
strcpy函数用法
原型:extern char *strcpy(char *dest,char *src);           用法:#include     功能:把src所指由NULL结束的字符串复制到dest所指的数组中。     说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。         返回指向dest的指针。     举例:
类执行机制
转载请注明出处:http://blog.csdn.net/kai_wei_zhang/article/details/8234761 1、字节码解释执行方式 在源码编译阶段将源码编译为JVM字节码,JVM字节码是一种中间代码的方式,要由JVM在运行期对其进行解释并执行,这种称为字节码解释执行方式 2、执行时的栈帧结构 (每一个线程有一到多个栈帧) 栈帧是用于支持虚拟机进行方法调用
laydate时间常用
laydate(options); options是一个对象,它包含了以下key: '默认值' elem: '#id', //需显示日期的元素选择器 event: 'click', //触发事件 format: 'YYYY-MM-DD hh:mm:ss', //日期格式 istime: false, //是否开启时间选择 ...
《计算机组成原理》知识点复习
《计算机组成原理》知识点复习 1.如果逻辑电路的输出状态仅和当时的输入状态有关,与过去的输入状态无关,称这种逻辑电路为组合逻辑电路。 2.三态门的“三态”指的是正常0态,正常1态和高阻z态。
一个正执行的程序如何启动另一新程序并关闭现执行程序
一个正执行的程序如何启动另一新程序并关闭现执行程序
面试题22:根据栈的压入序列,判断弹出序列是否合法
根据栈的压入序列,判断弹出序列是否合法