首页 > java > List的二种循环速度比较

List的二种循环速度比较

2010年1月9日
237 views 评论 发表评论

我们都知道从jdk1.5起JAVA可以使用一种新的循环写法

// 以前的用法
int len=list.size();

for (int k = 0; k < len; k++) {
System.out.println(list.get(k));
}

//1.5 的用法
for (Object e : list) {
System.out.println(e);
}
可以看出1.5的写法确实是简单了不小

也不用担心数组越界的问题

但这写会带来性能提升吗??

接下来我们测试一吓

测试代码如下:

List list=new ArrayList();
for(int i=0;i<1000000;i++){
list.add(i);
}

//  循环100W次
long l=System.currentTimeMillis();
for(Integer i:list){
}
System.out.println(System.currentTimeMillis()-l);
l=System.currentTimeMillis();
int len=list.size();
for(int i=0;i   list.get(i);
}
System.out.println(System.currentTimeMillis()-l);

结果是:

47
16

用1.5的循环方法居然慢了近二倍…

有趣的是如果把循环List改为Integer[]那他们的时间是相同的,1000W次也就16毫秒.

纯净水 java

  1. 匿名
    2010年9月28日18:35 | #1

    老大,你的那个对象做了toString方法,靠,能不慢吗?

    long start = System.currentTimeMillis();
    int test[] = new int[10000000];
    for (int i = 0; i < test.length; i++)
    ;
    long end = System.currentTimeMillis();
    System.out.println("xx " + ( end – start));
    start = System.currentTimeMillis();
    for (int i : test)
    ;
    end = System.currentTimeMillis();
    System.out.println("xx " + ( end – start));

  2. 匿名
    2010年9月28日18:43 | #2

    两种循环,不一样

    第一,如果循环的对象是基础数据类型,请使用int i:….这种新的方式会快

    如果循环对象是List或者Collection等等,请使用int i = 0; …. 这种方式会快5倍左右。

  3. 匿名
    2011年5月16日20:15 | #3

    @匿名
    如果是list或是collection之类的,请用
    for (Iterator iterator2 = occList.iterator(); iterator2.hasNext();) {
    Object object = (Object) iterator2.next();
    }
    的方式来循环,会快不少,尤其是LinkedList,耗时越长的方法越明显。
    如果有一个很大的List,需要进行复杂的计算,耗时很长的话,用int i =0;i<… 的方式,到后面几乎动不了了。

  4. 匿名
    2011年5月16日22:01 | #4

    我觉得兄台不是因为用了toString所以才慢,而是用了自动拆装包所以慢:

    for(Integer i:list){}

    之前放的是int,拿出来把它装成Integer了

  1. 目前还没有任何 trackbacks 和 pingbacks.
  • 粤ICP备09032914号