<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java For循環(huán)的十一種優(yōu)化方案!

          共 3087字,需瀏覽 7分鐘

           ·

          2021-08-27 19:08

          你知道的越多,不知道的就越多,業(yè)余的像一棵小草!

          你來,我們一起精進(jìn)!你不來,我和你的競(jìng)爭(zhēng)對(duì)手一起精進(jìn)!

          編輯:業(yè)余草

          推薦:https://www.xttblog.com/?p=5261

          Java For 循環(huán)的常見寫法和優(yōu)化方式,總結(jié)——些值得一看的提高效率小妙招!

          前言

          ?

          我們都經(jīng)常使用一些循環(huán)耗時(shí)計(jì)算的操作,特別是 for 循環(huán),它是一種重復(fù)計(jì)算的操作,如果處理不好,耗時(shí)就比較大,如果處理書寫得當(dāng)將大大提高效率,下面總結(jié)幾條 for 循環(huán)的常見優(yōu)化方式。

          ?

          首先,我們初始化一個(gè)集合 list,如下:

          List<String> list = new ArrayList<String>();

          方法一:最常規(guī)的不加思考的寫法

          優(yōu)點(diǎn):較常見,易于理解。

          缺點(diǎn):每次都要計(jì)算list.size()

          for (int i = 0; i < list.size(); i++) {
              System.out.println(list.get(i));
          }

          方法二:數(shù)組長(zhǎng)度提取出來

          針對(duì)第一種方法的缺點(diǎn),大多數(shù)程序員的解決方案是把list.size()計(jì)算給抽取出來。

          int m = list.size();
          for (int i = 0; i < m; i++) {
              System.out.println(list.get(i));
          }

          優(yōu)點(diǎn):不必每次都計(jì)算

          缺點(diǎn):

          1. m 的作用域不夠小,違反了最小作用域原則
          2. 不能在 for 循環(huán)中操作 list 的大小,比如除去或新加一個(gè)元素

          方法三:數(shù)組長(zhǎng)度提取出來

          for (int i = 0, n = list.size(); i < n; i++) {
              System.out.println(list.get(i));
          }

          優(yōu)點(diǎn):不必每次都計(jì)算 ,變量的作用域遵循最小范圍原則

          缺點(diǎn):

          1. i 和 n 的作用域是縮小了,但是多出了一個(gè)變量
          2. 不能在 for 循環(huán)中操作 list 的大小,比如除去或新加一個(gè)元素

          方法四:采用倒序的寫法

          優(yōu)點(diǎn):不必每次都計(jì)算 ,變量的作用域遵循最小范圍原則

          缺點(diǎn):

          1. 結(jié)果的順序會(huì)反
          2. 看起來不習(xí)慣,不易讀懂

          適用場(chǎng)合:與顯示結(jié)果順序無關(guān)的地方,比如保存之前數(shù)據(jù)的校驗(yàn)等。

          for (int i = list.size() - 1; i >= 0; i--) {
              System.out.println(list.get(i));
          }

          方法五:i++ 改為 ++i

          優(yōu)點(diǎn):前置版本的遞增運(yùn)算符避免了不必要的工作,它把值加1后直接返回改變了的運(yùn)算對(duì)象。

          缺點(diǎn):使用起來不一定習(xí)慣。

          for (int i = 0, n = list.size(); i < n; ++i) {
            System.out.println(list.get(i));
          }

          方法六:Iterator 遍歷

          優(yōu)點(diǎn):簡(jiǎn)潔

          for (Iterator<String> it = list.iterator(); it.hasNext();) {
                System.out.println(it.next());
          }

          方法七:jdk1.5 新寫法

          優(yōu)點(diǎn):簡(jiǎn)潔結(jié)合泛型使用更簡(jiǎn)潔

          缺點(diǎn):jdk1.4 向下不兼容,語(yǔ)法糖模式,性能不夠好

          for (Object o : list) {
              System.out.println(o);
          }

          方法八:循環(huán)嵌套外大內(nèi)小原則

          從外至里,循環(huán)對(duì)象 size 要從小到大。

          for (int i = 0; i < 100000; i++) {
             for (int j = 0; j < 10; j++) {
             }
          }
          JVM的分支預(yù)測(cè)

          方法九:循環(huán)嵌套提取不需要循環(huán)的邏輯

          優(yōu)化前:

          int a = 10, b = 11;
          for (int i = 0; i < 10; i++) {
              i = i * a * b;

          優(yōu)化后:

          int c = a * b;
          for (int i = 0; i < 10; i++) {
              i = i * c;
          }

          方法十:異常處理寫在循環(huán)外面

          for (int i = 0; i < 10; i++) {
            try {
            } catch (Exception e) {
            }
          }
          異常在循環(huán)外
          try {
            for (int i = 0; i < 10; i++) {
            }
          catch (Exception e) {

          }

          分析:捕獲異常是很耗資源的,所以不能將try catch放到循環(huán)內(nèi)部,優(yōu)化后同樣有好幾個(gè)數(shù)量級(jí)的提升

          方案十一:循環(huán)條件使用<要快于<=,>和>=同理

          這個(gè)就不具體列舉案例了。。。

          瀏覽 155
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩三级片网站 | 国产又爽 又黄 A片 | 淫基地| 国产免费麻豆 | 息与子五十路の高齢熟女在线视频 |