Raymond
Java笔记

2006年3月3日

在Java高效编程里面看到变量一个ArrayList的时候,有两种方式:
假设a是个ArrayList

1、 for (int i=0;i<a.size();i++) {
2、 for (int i=0,n=a.size();i<n;i++) {

带着点怀疑我做了一下试验,的确是方法2快一点的,估计是a.size()方法里面花费了一点多余的时间。后来我想到jdk 1.5开始还有一种遍历的for/each方法,我做了一下比较,结果有点惊讶。

源程序如下

 1import java.util.ArrayList;
 2
 3public class ProfileArrayList {
 4
 5  public static void main(String[] args) {
 6    ArrayList<String> s=new ArrayList<String>();
 7    for (int i=0;i<15000;i++{
 8      s.add(""+System.currentTimeMillis());
 9    }

10    System.out.println("Start ");
11    testOne(s);
12    testTwo(s);
13    testThree(s);
14    System.out.println("End ");
15  }

16  
17  private static void testOne(ArrayList<String> a) {
18    int j=0;String s=null;
19    for (int i=0;i<a.size();i++{
20      s=a.get(i);
21      j++;
22    }

23  }

24  
25private static void testTwo(ArrayList<String> a) {
26    int j=0;
27    String s=null;
28    for (int i=0,n=a.size();i<n;i++{
29      s=a.get(i);
30      j++;
31    }

32  }

33
34private static void testThree(ArrayList<String> a) {
35  int j=0;
36  for (String s : a) {
37    j++;
38  }

39}

40
41}

42

通过Profiling工具看结果:
方法      运行时间
testOne   0.055764
testTwo  0.043821
testThres 0.132451

也就是说,jdk 1.5的for/each循环是最慢的。有点不相信。开头觉得是因为赋值造成的,但后来在另两个方法里面加上赋值语句,依然是for/each最慢。比较有趣的结果。

从代码清晰角度,用for/each消耗多一点点时间似乎也无所谓。但是,另两种代码也不见得“不清晰”,呵呵。看着办了。

posted @ 2006-03-03 12:00 Raymond的Java笔记 阅读(492) | 评论 (0)编辑 收藏