国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Java優(yōu)化for循環(huán)嵌套的高效率方法

瀏覽:2日期:2022-08-24 16:51:47

前幾天有人問過我一個(gè)問題,就是兩個(gè)嵌套for循環(huán)執(zhí)行效率的問題,問有什么好的辦法替換。當(dāng)時(shí)我想了想,實(shí)在想不起來,哎,慚愧!!! 請(qǐng)教了答案,恍然大悟。

比如:兩個(gè)list中分別裝有相同的對(duì)象數(shù)據(jù)。 list1中有3萬條對(duì)象數(shù)據(jù)。 list2中有2萬條對(duì)象數(shù)據(jù)(但是對(duì)象中的某個(gè)屬性變量為空)。兩個(gè)list中的id或者其他變量都一模一樣。請(qǐng)用最快的方式找出list2中變量為空的那個(gè)對(duì)象,并且去list1中找出id相同的對(duì)象。 或者可以理解成,從list2中找出變量為空的,去list1中找出對(duì)應(yīng)的對(duì)象,然后把為空的列補(bǔ)上。總之就是這么一個(gè)意思,先 for 循環(huán) list2,判斷一下每個(gè)對(duì)象的那個(gè)屬性變量是否為空,如果為空,再去for循環(huán)list1,找出id一樣的對(duì)象,就算執(zhí)行成功了。

那么請(qǐng)看下邊的for循環(huán)嵌套的解決方式:

for(Member m2:list2){ if(m2.getName()==null){ for(Member m1:list1){ if(m1.getId().intValue()==m2.getId().intValue()){ System.out.println(m2.getId()+' Name 值為空!!!'); } } }}

這樣真的好嗎? 如果有上萬,甚至十幾萬的數(shù)據(jù),那么這個(gè)執(zhí)行效率問題,我就不多說了。 非常非常的慢。

下邊來看使用map代替的執(zhí)行方式,以及兩種方式的效率對(duì)比:

import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.concurrent.TimeUnit; class Member { private Integer id; private String name; private Integer age; private Date addDate; public Member() { } public Member(Integer id, String name, Integer age, Date addDate) { super(); this.id = id; this.name = name; this.age = age; this.addDate = addDate; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getAddDate() { return addDate; } public void setAddDate(Date addDate) { this.addDate = addDate; } } public class For2 { public static void main(String[] args) throws InterruptedException { List<Member> list1 = new ArrayList<>(); List<Member> list2 = new ArrayList<>(); for(int i=0;i<30000;i++){ Date date = new Date(); list1.add(new Member((i+1),'技術(shù)客',(i+1), date)); if(i%2==0){ list2.add(new Member((i+1),null,(i+1), date)); } } //雙for循環(huán)嵌套測(cè)試 long s1 = System.currentTimeMillis(); int forNumber = 0; for(Member m2:list2){ if(m2.getName()==null){ for(Member m1:list1){ if(m1.getId().intValue()==m2.getId().intValue()){// System.out.println(m2.getId()+' Name 值為空!!!'); forNumber++; } } } } long s2 = System.currentTimeMillis(); System.out.println('雙for循環(huán)查詢時(shí)間為:'+(s2-s1)+'(毫秒),一共查詢出'+forNumber+'條數(shù)據(jù) nnn'); TimeUnit.SECONDS.sleep(3); //map查詢測(cè)試 long s3 = System.currentTimeMillis(); int mapNumber = 0; Map<Integer, Member> map = new HashMap<>(); for(Member m1:list1){ map.put(m1.getId(), m1); } for(Member m2:list2){ if(m2.getName()==null){ Member m = map.get(m2.getId()); if(m!=null){// System.out.println(m2.getId()+' Name 值為空!!!'); mapNumber++; } } } long s4 = System.currentTimeMillis(); System.out.println('使用map結(jié)構(gòu)查詢時(shí)間為:'+(s4-s3)+'(毫秒),一共查詢出'+mapNumber+'條數(shù)據(jù) nnn'); } }

輸出結(jié)果:

雙for循環(huán)查詢時(shí)間為:1578(毫秒),一共查詢出15000條數(shù)據(jù) 使用map結(jié)構(gòu)查詢時(shí)間為:14(毫秒),一共查詢出15000條數(shù)據(jù)

如果我們模擬10萬條數(shù)據(jù),然后其中五千條重復(fù)數(shù)據(jù)的情況下:效率更是天壤之別。

看輸出結(jié)果:

雙for循環(huán)查詢時(shí)間為:30929(毫秒),一共查詢出50000條數(shù)據(jù) 使用map結(jié)構(gòu)查詢時(shí)間為:24(毫秒),一共查詢出50000條數(shù)據(jù)

循環(huán)數(shù)據(jù)越小,兩者差別也就越小,但是數(shù)據(jù)量越大,差別也就越大。 10萬條數(shù)據(jù)的差別竟然達(dá)到上千倍!

以上就是Java優(yōu)化for循環(huán)嵌套的高效率方法的詳細(xì)內(nèi)容,更多關(guān)于Java 優(yōu)化 for循環(huán)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 亚洲清纯自偷自拍另类专区 | 成人欧美视频在线观看播放 | 看片日韩 | 久色乳综合思思在线视频 | 久久频这里精品99香蕉久网址 | 一级毛片视频免费观看 | 国产成人一区二区三区在线播放 | 一级毛片免费在线播放 | 国产精品福利午夜h视频 | 波多野结衣一区二区三区高清在线 | 在线日韩欧美一区二区三区 | 精品在线观看视频 | 91精品福利手机国产在线 | 亚洲精品美女 | 自拍偷自拍亚洲精品一区 | 99热久久国产精品免费观看 | 亚洲精品一区二区不卡 | 三级网站视频在线观看 | 亚洲精品成人网久久久久久 | 欧美成人免费网在线观看 | 亚洲二三区 | 欧美日韩在线国产 | 国产欧美一区二区三区在线 | 香蕉久久国产 | 手机在线看片福利 | 免费一级大毛片a一观看不卡 | 国产日韩欧美一区 | 高清欧美性xxxx成熟 | 新版天堂资源中文在线 | 香蕉依依精品视频在线播放 | 爱逼综合网 | 在线观看免费亚洲 | 欧美三级免费网站 | 成人毛片免费看 | 国产成人毛片 | 亚洲国产成人99精品激情在线 | 成人a毛片免费全部播放 | 成人做爰免费网站 | 男女男精品视频免费观看 | 美国全免费特一级毛片 | 亚洲天堂二区 |