欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java避免多層嵌套循環(huán)用到的一些小技巧分享

 更新時間:2022年10月08日 08:34:43   作者:這名字好厲害O  
這篇文章主要介紹了java避免多層嵌套循環(huán)用到的一些小技巧分享,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

避免多層嵌套循環(huán)用到的小技巧

在JAVA開發(fā)中,我們經(jīng)常遇到一些寫二重循環(huán)甚至更多循環(huán)的情況,但是,這種循環(huán)會造成很多資源浪費。

因為X次循環(huán)下套用Y次循環(huán),相當于總共執(zhí)行了X * Y次運算,因此,我們應盡量避免多重嵌套的情況。

例:

(1)借用第三個List,使用Contains()方法

情景:從ListA 中取出userId與ListB中的userId做對比,當其相等時,取出ListB中該條數(shù)據(jù)。

public List getDetail(List<AttendanceInfo > ?listA, List<CardInfo > listB) {
?? ? ? ?List list= new ArrayList<>();
?? ? ? ?List listC = new ArrayList();
?? ? ? ?for(AttendanceInfo attendanceInfo: attendanceList){
? ? ? ? ? ? listC.add(attendanceInfo.getUserId());
? ? ? ? }
? ? ? ? for (CardInfo cardInfo: cardList){
? ? ? ? ? ? if (! listC.contains(cardInfo.getUserId())){
? ? ? ? ? ? ? ? list.add(cardInfo);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return list;
? ? }

我們可以先創(chuàng)建一個空的ListC, 遍歷 ListA取出userId添加到ListC中,之后,遍歷ListB并通過contains()方法將符合數(shù)據(jù)添加到list當中。

(2)數(shù)據(jù)量大,使用HashSet

雖然 contains()方法可以進行判斷,但是當數(shù)據(jù)量極大時,我們借用的第三個List就不要使用ArrayList了,最好使用HashSet,這跟他們的底層數(shù)據(jù)結(jié)構(gòu)有關(guān)系。

舉個直觀的例子,循環(huán)的時候,同樣是20W條數(shù)據(jù),ArrayList的contains()方法跑了2分鐘,HashSet的contains()方法跑了 1秒?。。?!

(3)JAVA8及以上使用lambda表達式

Java8引進了lambda表達式和流模式,比如map.reduce,詳情可百度學習下lambda寫法。

跳出java中的多層嵌套循環(huán)

使用 break 標號語句跳出嵌套循環(huán):

public static void main(String[] args) {
 javastack:
 for (int i = 0; i < 10; i++) {
  for (int j = 0; j < 10; j++) {
   System.out.println("i="+i+"?j="+j);
   if (j == 3) {
    break javastack;
   }
  }
 }
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring在代碼中獲取bean的方法小結(jié)

    Spring在代碼中獲取bean的方法小結(jié)

    在工作中有時候我們需要在非spring依賴注入或管理的類中獲取service、dao等bean對象,這時候用@Autowired和@Resource顯然是不行的,那么下面這篇文章就給大家了整理幾種獲取bean的方式,對大家的學習和工作具有一定的參考借鑒,下面來一起看看吧。
    2016-11-11
  • 優(yōu)化SpringBoot程序啟動速度的實現(xiàn)

    優(yōu)化SpringBoot程序啟動速度的實現(xiàn)

    本文主要介紹了優(yōu)化SpringBoot程序啟動速度的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Spring context:component-scan的使用及說明

    Spring context:component-scan的使用及說明

    這篇文章主要介紹了Spring context:component-scan的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 手擼一個Spring?Boot?Starter并上傳到Maven中央倉庫

    手擼一個Spring?Boot?Starter并上傳到Maven中央倉庫

    本文主要介紹了手擼一個Spring?Boot?Starter并上傳到Maven中央倉庫,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • MyBatis Plus之實現(xiàn)動態(tài)排序方式

    MyBatis Plus之實現(xiàn)動態(tài)排序方式

    這篇文章主要介紹了MyBatis Plus之實現(xiàn)動態(tài)排序方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 減小Maven項目生成的JAR包體積實現(xiàn)提升運維效率

    減小Maven項目生成的JAR包體積實現(xiàn)提升運維效率

    在Maven構(gòu)建Java項目過程中,減小JAR包體積可通過排除不必要的依賴和使依賴jar包獨立于應用jar包來實現(xiàn),在pom.xml文件中使用<exclusions>標簽排除不需要的依賴,有助于顯著降低JAR包大小,此外,將依賴打包到應用外,可減少應用包的體積
    2024-10-10
  • SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案

    SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案

    這篇文章主要介紹了SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • springcloud中RabbitMQ死信隊列與延遲交換機實現(xiàn)方法

    springcloud中RabbitMQ死信隊列與延遲交換機實現(xiàn)方法

    死信隊列是消息隊列中非常重要的概念,同時我們需要業(yè)務場景中都需要延遲發(fā)送的概念,比如12306中的30分鐘后未支付訂單取消,那么本期,我們就來講解死信隊列,以及如何通過延遲交換機來實現(xiàn)延遲發(fā)送的需求,感興趣的朋友一起看看吧
    2022-05-05
  • Java隊列篇之實現(xiàn)數(shù)組模擬隊列及可復用環(huán)形隊列詳解

    Java隊列篇之實現(xiàn)數(shù)組模擬隊列及可復用環(huán)形隊列詳解

    像棧一樣,隊列(queue)也是一種線性表,它的特性是先進先出,插入在一端,刪除在另一端。就像排隊一樣,剛來的人入隊(push)要排在隊尾(rear),每次出隊(pop)的都是隊首(front)的人
    2021-10-10
  • 解決springboot環(huán)境切換失效的問題

    解決springboot環(huán)境切換失效的問題

    這篇文章主要介紹了解決springboot環(huán)境切換失效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論