List的二种循环速度比较
我们都知道从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毫秒.
老大,你的那个对象做了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));
两种循环,不一样
第一,如果循环的对象是基础数据类型,请使用int i:….这种新的方式会快
如果循环对象是List或者Collection等等,请使用int i = 0; …. 这种方式会快5倍左右。
@匿名
如果是list或是collection之类的,请用
for (Iterator iterator2 = occList.iterator(); iterator2.hasNext();) {
Object object = (Object) iterator2.next();
}
的方式来循环,会快不少,尤其是LinkedList,耗时越长的方法越明显。
如果有一个很大的List,需要进行复杂的计算,耗时很长的话,用int i =0;i<… 的方式,到后面几乎动不了了。
我觉得兄台不是因为用了toString所以才慢,而是用了自动拆装包所以慢:
for(Integer i:list){}
之前放的是int,拿出来把它装成Integer了