溫馨提示×

溫馨提示×

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

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

怎樣進行Javafor循環Map集合優化實現

發布時間:2021-10-15 17:22:49 來源:億速云 閱讀:126 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關怎樣進行Javafor循環Map集合優化實現,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們在其中嵌套循環優化小循環驅動大循環的基礎上,借助Map集合高效的查詢性能來優化嵌套for循環。

如果小循環和大循環的集合元素數量分別為M和N,則雙層For循環的循環次數是M*N,隨著M和N的增長,對性能的影響越來越大。因此,本文考慮進一步優化,使得循環次數變為M+N。利用下面的代碼來模擬測試兩種情況的性能:

import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.function.Function;import java.util.stream.Collectors;public class ForUpdate {  public static void main(String[] args) {//    for (int i = 0; i < 10000; i += 10) {//      loopGivenNum(i);//    }    for (int i = 10000; i < 100000; i += 10000) {      loopGivenNum(i);    }    System.out.println("----- done -----");  }  private static void loopGivenNum(int i) {    List<String> smallLoop = getLoopList(i);    List<String> bigLoop = getLoopList(2 * i);    long doByForTimes = doByFor(bigLoop, smallLoop);    long doByMapTimes = doByMap(bigLoop, smallLoop);    System.out.println("size " + i + ": " + doByForTimes + "," + doByMapTimes);  }  /**   * 獲取循環變量   * @param size 循環變量元素個數   */  private static List<String> getLoopList(int size) {    List<String> list = new ArrayList<>();    for (int i = 0; i < size; i++) {      list.add(String.valueOf(i));    }    return list;  }  private static long doByFor(List<String> bigLoop, List<String> smallLoop) {    long startTime = System.currentTimeMillis();    for (String str1 : smallLoop) {      for (String str2 : bigLoop) {        if (str1.equals(str2)) {          continue;        }      }    }    return System.currentTimeMillis() - startTime;  }  /**   * 使用 Map 優化   * @param bigLoop   * @param smallLoop   */  private static long doByMap(List<String> bigLoop, List<String> smallLoop) {    long startTime = System.currentTimeMillis();    // 轉換成map    Map<String, String> loopMap = bigLoop.stream().collect(Collectors.toMap(k -> k, Function.identity()));    System.out.println(loopMap.size());    for (String str1 : smallLoop) {      if (loopMap.containsKey(str1)) {        continue;      }    }    return System.currentTimeMillis() - startTime;  }}

輸出結果:

size 10000: 756,97size 20000: 3091,8size 30000: 4342,7size 40000: 8848,7size 50000: 16317,7size 60000: 31652,7size 70000: 37078,7

由此可見,數據量越大嵌套For循環執行時間越長,而使用Map后,縱使數據量增長到了20w,執行時間也維持在7ms左右。數據量小的時候,執行結果就不再貼出來了。

結論:使用Map優化后的方法執行的效率比嵌套循環提高了很多很多。

上述就是小編為大家分享的怎樣進行Javafor循環Map集合優化實現了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女