JAVA—咖啡館

          ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks
          由于本人的一個低級失誤,造成結論錯誤,for才是最終的勝者。foreach和iterator是類似的機制,性能都不是很好。以下代碼已經重新調整,再次道歉。

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

          1 完整的測試代碼
          view plaincopy to clipboardprint?
          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) {
          }
          }

          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才是最好的,推薦大家使用。
          posted on 2009-05-14 11:34 rogerfan 閱讀(362) 評論(0)  編輯  收藏 所屬分類: 【Java知識】
          主站蜘蛛池模板: 辉县市| 铁岭县| 河北区| 崇州市| 鹤峰县| 元朗区| 武乡县| 云南省| 南和县| 阳东县| 新疆| 马关县| 女性| 军事| 文成县| 丹寨县| 郸城县| 马尔康县| 宁强县| 军事| 渭南市| 旬阳县| 平远县| 济源市| 太原市| 上杭县| 屏南县| 新巴尔虎右旗| 山东| 皋兰县| 新沂市| 喀喇沁旗| 敦煌市| 洞口县| 二连浩特市| 镇宁| 泉州市| 电白县| 延边| 通州区| 马边|