for (int i = 0, size = c.size(); i < size; i++)

近几天,看老大的框架,里面出现这样的语句for (int i = 0, size = c.size(); i < size; i++),我总觉得这个和for (int i = 0; i < c.size(); i++)没有什么不同,毕竟java不是C,一般情况下,我们程序给运行了,底层JVM应该给我们优化才是。于是,我写了个程序对比了一下,发现性能情况还是很大不同的。
package  com.wang.test;

import  java.util.ArrayList;
import  java.util.Arrays;
import  java.util.Iterator;
import  java.util.List;
import  java.util.Set;

public   class  Test {
    
private   final   static   int  Length  =   1000 ;

    
public   static   void  main(String[] args) {
        
int  length  =   1000 ;
        List
< Double >  c  =   new  ArrayList < Double > ();
        initSet(c);
        
long  t1  =  System.currentTimeMillis();
        test1(c);
        
long  t2  =  System.currentTimeMillis();
        test2(c);
        
long  t3  =  System.currentTimeMillis();
        test3(c);
        
long  t4  =  System.currentTimeMillis();
        test4(c);
        
long  t5  =  System.currentTimeMillis();
        System.out
                .println(
" ******************************************************************* " );
        System.out.println(t2 
-  t1);
        System.out.println(t3 
-  t2);
        System.out.println(t4 
-  t3);
        System.out.println(t5 
-  t4);
    }

    
private   static   void  test3(List < Double >  c) {
        
for  (Iterator < Double >  iterator  =  c.iterator(); iterator.hasNext();) {
            System.out.println(iterator.next());

        }

    }

    
private   static   void  test2(List < Double >  c) {
        
for  ( int  i  =   0 ; i  <  c.size(); i ++ ) {
            System.out.println(c.get(i));
        }

    }

    
private   static   void  test4(List < Double >  c) {
        
for  ( int  i  =  c.size()  -   1 ; i  >=   0 ; i -- ) {
            System.out.println(c.get(i));
        }

    }

    
private   static   void  test1(List < Double >  c) {
        
for  ( int  i  =   0 , size  =  c.size(); i  <  size; i ++ ) {
            System.out.println(c.get(i));
        }
    }

    
private   static   void  initSet(List < Double >  c) {
        
for  ( int  i  =   0 ; i  <  Length; i ++ ) {
            c.add(Math.random());
        }

    }

}
Length==1000时:
94
62
32
31
Length==10000时:
516
406
375
344

Length==100000时:
3563
3453
3641
3453
Length==1000000时:
35109
34625
36469
34891


JVM到底有没有优化呢。我没有打开汇编看。但至少我得出结论:for (int i = 0, size = c.size(); i < size; i++)这种写法没有必要。数据量不大的时候,反而效率低很多。

各位高手给建议。。。。。。

也有高手说:

for(int i=0;i<list.size();i++) 与 for(int i=0,len=list.size();i<len;i++)的区别


前者的i<list.size()  ,当每次for到i<list.size()    java 都会计算下 list的大小,如果使用一个变量先赋值下,那么就只会计算一次了,这样如果一个for循环有一千次,那么优化的可能性也是不错的,衍生下,一直听说foreach的循环优于for,估计也是优化
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值