1. 程式人生 > >全面測試JAVA各種迴圈的效能 for輕鬆勝出

全面測試JAVA各種迴圈的效能 for輕鬆勝出

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

鄭重道歉:

由於本人的一個低階失誤,造成結論錯誤,for才是最終的勝者。foreach和iterator是類似的機制,效能都不是很好。以下程式碼已經重新調整,再次道歉。

 

 

 

以前一直有人說,foreach的效能有損失,不建議使用,今天特意測試了一下,結果是 for方式的效能最好,foreach次之,而Iterator迴圈效能最差..

1 完整的測試程式碼

[java] view plain copy print ?
  1. import java.util.ArrayList;  
  2. import java.util.Iterator;  
  3. import java.util.List;  
  4. /** 
  5.  * 測試JAVA各種迴圈的效能。<br> 
  6.  * for 方式的效能最好,foreach次之,而Iterator迴圈效能最差。 
  7.  *  
  8.  * @author 老紫竹研究室(laozizhu.com) 
  9.  */  
  10. public class TestLoop {  
  11.   public
     static void main(String[] args) {  
  12.     int number = 1000000;  
  13.     // 我們構造一個列表  
  14.     List<String> list = new ArrayList<String>(number);  
  15.     for (int i = 0; i < number; i++) {  
  16.       list.add(Integer.toString(i));  
  17.     }  
  18.     System.out.println("測試列表的效能...");  
  19.     // 我們用foreach方式測試  
  20.     long begin = System.nanoTime();  
  21.     for (String i : list) {  
  22.       testMethod(i);  
  23.     }  
  24.     System.out.printf("%10s=%10d/n""foreach", System.nanoTime() - begin);  
  25.     begin = System.nanoTime();  
  26.     // 下面我們用Iterator測試  
  27.     Iterator<String> it = list.iterator();  
  28.     while (it.hasNext()) {  
  29.       testMethod(it.next());  
  30.     }  
  31.     System.out.printf("%10s=%10d/n""iterator", (System.nanoTime() - begin));  
  32.       
  33.     // 第三種,我們用index進行  
  34.     begin = System.nanoTime();  
  35.     for (int i = 0; i < number; i++) {  
  36.       testMethod(list.get(i));  
  37.     }  
  38.     System.out.printf("%10s=%10d/n""for", (System.nanoTime() - begin));  
  39.     System.out.println("測試陣列的效能...");  
  40.     // 我們再來測試陣列  
  41.     String[] strArr = new String[number];  
  42.     for (int i = 0; i < number; i++) {  
  43.       strArr[i] = Integer.toString(i);  
  44.     }  
  45.     // 我們用foreach方式測試  
  46.     begin = System.nanoTime();  
  47.     for (String i : strArr) {  
  48.       testMethod(i);  
  49.     }  
  50.     System.out.printf("%10s=%10d/n""foreach", System.nanoTime() - begin);  
  51.     // 第二種,我們用index進行  
  52.     begin = System.nanoTime();  
  53.     for (int i = 0; i < number; i++) {  
  54.       testMethod(strArr[i]);  
  55.     }  
  56.     System.out.printf("%10s=%10d/n""for", System.nanoTime() - begin);  
  57.   }  
  58.   public static void testMethod(String str) {  
  59.   }  
  60. }  
  61.    
import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * 測試JAVA各種迴圈的效能。<br> * for 方式的效能最好,foreach次之,而Iterator迴圈效能最差。 *  * @author 老紫竹研究室(laozizhu.com) */public class TestLoop {  public static void main(String[] args) {    int number = 1000000;    // 我們構造一個列表    List<String> list = new ArrayList<String>(number);    for (int i = 0; i < number; i++) {      list.add(Integer.toString(i));    }    System.out.println("測試列表的效能...");    // 我們用foreach方式測試    long begin = System.nanoTime();    for (String i : list) {      testMethod(i);    }    System.out.printf("%10s=%10d/n", "foreach", System.nanoTime() - begin);    begin = System.nanoTime();    // 下面我們用Iterator測試    Iterator<String> it = list.iterator();    while (it.hasNext()) {      testMethod(it.next());    }    System.out.printf("%10s=%10d/n", "iterator", (System.nanoTime() - begin));        // 第三種,我們用index進行    begin = System.nanoTime();    for (int i = 0; i < number; i++) {      testMethod(list.get(i));    }    System.out.printf("%10s=%10d/n", "for", (System.nanoTime() - begin));    System.out.println("測試陣列的效能...");    // 我們再來測試陣列    String[] strArr = new String[number];    for (int i = 0; i < number; i++) {      strArr[i] = Integer.toString(i);    }    // 我們用foreach方式測試    begin = System.nanoTime();    for (String i : strArr) {      testMethod(i);    }    System.out.printf("%10s=%10d/n", "foreach", System.nanoTime() - begin);    // 第二種,我們用index進行    begin = System.nanoTime();    for (int i = 0; i < number; i++) {      testMethod(strArr[i]);    }    System.out.printf("%10s=%10d/n", "for", System.nanoTime() - begin);  }  public static void testMethod(String str) {  }} 

2 執行結果
測試列表的效能...
   foreach=  41997864
  iterator=   43951774
          for=   14351289
測試陣列的效能...
   foreach=   1751863
          for=    1484585



3 結論:
foreach的效能很一般,for才是最好的,推薦大家使用。

 

 

如果我的測試程式碼有問題,歡迎指正。

 

 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述