java避免多層嵌套循環(huán)用到的一些小技巧分享
避免多層嵌套循環(huán)用到的小技巧
在JAVA開(kāi)發(fā)中,我們經(jīng)常遇到一些寫(xiě)二重循環(huán)甚至更多循環(huán)的情況,但是,這種循環(huán)會(huì)造成很多資源浪費(fèi)。
因?yàn)閄次循環(huán)下套用Y次循環(huán),相當(dāng)于總共執(zhí)行了X * Y次運(yùn)算,因此,我們應(yīng)盡量避免多重嵌套的情況。
例:
(1)借用第三個(gè)List,使用Contains()方法
情景:從ListA 中取出userId與ListB中的userId做對(duì)比,當(dāng)其相等時(shí),取出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)建一個(gè)空的ListC, 遍歷 ListA取出userId添加到ListC中,之后,遍歷ListB并通過(guò)contains()方法將符合數(shù)據(jù)添加到list當(dāng)中。
(2)數(shù)據(jù)量大,使用HashSet
雖然 contains()方法可以進(jìn)行判斷,但是當(dāng)數(shù)據(jù)量極大時(shí),我們借用的第三個(gè)List就不要使用ArrayList了,最好使用HashSet,這跟他們的底層數(shù)據(jù)結(jié)構(gòu)有關(guān)系。
舉個(gè)直觀的例子,循環(huán)的時(shí)候,同樣是20W條數(shù)據(jù),ArrayList的contains()方法跑了2分鐘,HashSet的contains()方法跑了 1秒!?。。?/p>
(3)JAVA8及以上使用lambda表達(dá)式
Java8引進(jìn)了lambda表達(dá)式和流模式,比如map.reduce,詳情可百度學(xué)習(xí)下lambda寫(xiě)法。
跳出java中的多層嵌套循環(huán)
使用 break 標(biāo)號(hào)語(yǔ)句跳出嵌套循環(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;
}
}
}
}以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring MVC cors跨域?qū)崿F(xiàn)源碼解析
本文主要介紹了spring MVC cors跨域?qū)崿F(xiàn)源碼解析。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
解決SpringBoot使用devtools導(dǎo)致的類型轉(zhuǎn)換異常問(wèn)題
這篇文章主要介紹了解決SpringBoot使用devtools導(dǎo)致的類型轉(zhuǎn)換異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。 一起跟隨小編過(guò)來(lái)看看吧2020-08-08
Java8?stream流分組groupingBy的使用方法代碼
對(duì)于java8的新特性groupingBy方法,相信有很多人都在工作中用過(guò),這篇文章主要給大家介紹了關(guān)于Java8?stream流分組groupingBy的使用方法,需要的朋友可以參考下2024-01-01
詳解在spring boot中配置多個(gè)DispatcherServlet
本篇文章主要介紹了詳解在spring boot中配置多個(gè)DispatcherServlet,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03
Java 入門(mén)圖形用戶界面設(shè)計(jì)之復(fù)選框
圖形界面(簡(jiǎn)稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)在視覺(jué)上更易于接受,本篇精講Java語(yǔ)言中關(guān)于圖形用戶界面的復(fù)選框2022-02-02

