wangflood

          精心維護(hù)一個技術(shù)blog,為了工作,也是愛好。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            14 Posts :: 19 Stories :: 8 Comments :: 0 Trackbacks
          近幾天,看老大的框架,里面出現(xiàn)這樣的語句for (int i = 0, size = c.size(); i < size; i++),我總覺得這個和for (int i = 0; i < c.size(); i++)沒有什么不同,畢竟java不是C,一般情況下,我們程序給運行了,底層JVM應(yīng)該給我們優(yōu)化才是。于是,我寫了個程序?qū)Ρ攘艘幌拢l(fā)現(xiàn)性能情況還是很大不同的。
          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到底有沒有優(yōu)化呢。我沒有打開匯編看。但至少我得出結(jié)論:for (int i = 0, size = c.size(); i < size; i++)這種寫法沒有必要。數(shù)據(jù)量不大的時候,反而效率低很多。

          各位高手給建議。。。。。。。Why



          posted on 2011-03-29 12:46 wangflood 閱讀(1016) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 荔浦县| 灵川县| 海门市| 登封市| 凌云县| 郴州市| 大同县| 华蓥市| 闻喜县| 泗水县| 娄底市| 玉树县| 奇台县| 大同市| 东丽区| 宁德市| 临邑县| 郑州市| 黄浦区| 蛟河市| 集安市| 秦安县| 西充县| 子长县| 蒙自县| 永春县| 博野县| 商洛市| 建昌县| 石泉县| 繁峙县| 深圳市| 曲麻莱县| 金华市| 罗平县| 玉田县| 郑州市| 武陟县| 中西区| 志丹县| 乐昌市|