亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么優化for循環性能

發布時間:2021-08-06 16:18:34 來源:億速云 閱讀:190 作者:Leah 欄目:編程語言

Java中怎么優化for循環性能,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1 嵌套循環

private static void bigSmall() {    long stratTime = System.nanoTime();    for (int i = 0; i < 10000000; i++) {      for (int j = 0; j < 100; j++) {      }    }    long endTime = System.nanoTime();    System.out.println("外大內小耗時:" + (endTime - stratTime));  }

上面是大循環驅動小循環,優化后改為小循環驅動大循環:

private static void smallBig() {    long stratTime = System.nanoTime();    for (int i = 0; i < 100; i++) {      for (int j = 0; j < 10000000; j++) {      }    }    long endTime = System.nanoTime();    System.out.println("外小內大耗時:" + (endTime - stratTime));  }

兩者耗時對比:

外大內小耗時:756859726

外小內大耗時:451345484

由以上對比可知,優化后性能顯著提升。嵌套循環應該遵循“外小內大”的原則,這就好比你復制很多個小文件和復制幾個大文件的區別。

2 循環變量的實例化應放在循環外

在第1節優化后的代碼基礎上,進行二次優化:

private static void smallBigBetter() {    long stratTime = System.nanoTime();    int i, j;    for (i = 0; i < 100; i++) {      for (j = 0; j < 10000000; j++) {      }    }    long endTime = System.nanoTime();    System.out.println("外小內大并且提取出循環內變量耗時:" + (endTime - stratTime));  }

執行結果:

外小內大并且提取出循環內變量耗時:445302240

雖然優化效果并不明顯,但是隨著循環次數的增加,耗時會越來越大,優化效果則會越來越明顯。分析:優化前需要實例化1+i=101次,優化后僅僅2次。

3 提取與循環無關的表達式

private static void calculationInner() {    int a = 3;    int b = 7;    long stratTime = System.nanoTime();    for (int i = 0; i < 10000000; i++) {      i = i * a * b;    }    long endTime = System.nanoTime();    System.out.println("未提取耗時:" + (endTime - stratTime));  }

優化后:

private static void calculationOuter() {    int a = 3;    int b = 7;    int c = a * b;    long stratTime = System.nanoTime();    for (int i = 0; i < 10000000; i++) {      i = i * c;    }    long endTime = System.nanoTime();    System.out.println("已提取耗時:" + (endTime - stratTime));  }

代碼中a*b與循環無關,所以應該把它放到外面,避免重復計算。從理論角度分析,由于減少了計算次數,故優化后性能會更高。

4 消除循環終止判斷時的方法調用

stratTime = System.nanoTime(); for (int i = 0; i < list.size(); i++) {    } endTime = System.nanoTime(); System.out.println("未優化list耗時:"+(endTime - stratTime));

優化后的代碼:

stratTime = System.nanoTime(); int size = list.size(); for (int i = 0; i < size; i++) {    } endTime = System.nanoTime(); System.out.println("優化list耗時:"+(endTime - stratTime));

每次循環,list.size()都會被執行一次,這無疑會影響程序的性能,所以應該將其放到循環外面,用一個變量來緩存其size,不要讓這一點點代碼而消耗我們這么多性能。

5 異常捕獲

在內部捕獲異常:

private static void catchInner() {    long stratTime = System.nanoTime();    for (int i = 0; i < 10000000; i++) {      try {      } catch (Exception e) {      }    }    long endTime = System.nanoTime();    System.out.println("在內部捕獲異常耗時:" + (endTime - stratTime));  }

在外部捕獲異常:

private static void catchOuter() {    long stratTime = System.nanoTime();    try {      for (int i = 0; i < 10000000; i++) {      }    } catch (Exception e) {    }    long endTime = System.nanoTime();    System.out.println("在外部捕獲異常耗時:" + (endTime - stratTime));  }

結果對比:

在內部捕獲異常耗時:6105716

在外部捕獲異常耗時:5465381

關于Java中怎么優化for循環性能問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

田阳县| 汪清县| 永泰县| 马尔康县| 新野县| 佛教| 罗山县| 浙江省| 伊通| 东平县| 循化| 井研县| 开平市| 视频| 新建县| 会宁县| 钦州市| 同心县| 铜山县| 高邮市| 临朐县| 澄城县| 武定县| 青海省| 曲松县| 肃南| 固始县| 合江县| 平南县| 兴化市| 建平县| 高阳县| 阜平县| 内江市| 广平县| 乐都县| 云霄县| 凉山| 株洲县| 万全县| 江门市|