存放80000000学生成绩的集合,怎么统计平均分性能高
大家好,我是雄雄,好久不介紹一下我,就被大家淡忘了……
我們都知道,遍歷集合的方式最常用的有兩種,一種是使用下標(biāo)的方式遍歷,第二種便是使用foreach遍歷,代碼分別如下:
使用下標(biāo)的方法:
public?static?void?testGetIndex(){int?num = 5;//聲明集合List<Integer> lists = new?ArrayList<Integer>(num);//給集合中賦值(0-150之間的隨機(jī)數(shù))for?(int?i = 0; i < num; i++) {lists.add(new?Random().nextInt(150));}//使用下標(biāo)遍歷for?(int?i = 0; i < lists.size(); i++) {System.out.print(lists.get(i)+" ");}}結(jié)果如下:
使用foreach的方法:
public?static?void?testForeach(){int?num = 5;//聲明集合List<Integer> lists = new?ArrayList<Integer>(num);//給集合中賦值(0-150之間的隨機(jī)數(shù))for?(int?i = 0; i < num; i++) {lists.add(new?Random().nextInt(150));}//使用下標(biāo)遍歷for?(int?i :lists) {System.out.print(i+" ");}}結(jié)果如下:
我們可以看到,這種方法在表面看起來區(qū)別不是很大,甚至可以說foreach遍歷的方法要比下標(biāo)遍歷的方式還要簡單。
那如果我們從另一角度——比如性能方面來看它兩的區(qū)別呢,誰又更勝一籌?
下面我們來結(jié)合案例具體分析一下兩種方法在性能方面的差異:
某市有80000000學(xué)生,在某一次市內(nèi)組織的考試后,接上面指示,需要對本市8千萬學(xué)生的成績進(jìn)行統(tǒng)計(jì)并計(jì)算平均分。
案例很簡單,無外乎就是將8千萬學(xué)生的成績加起來除以8千萬,代碼如下:
public?static?void?test1(){int?num = 80*100000;List<Integer> score = new?ArrayList<Integer>(num);//隨機(jī)生成分?jǐn)?shù)賦值到集合中for(int?i= 0;i<num;i++){score.add(new?Random().nextInt(150));}//開始記錄時(shí)間long?strat = System.currentTimeMillis();System.out.println("平均分是:"+avgForeach(score));long?end = System.currentTimeMillis();System.out.println("執(zhí)行時(shí)間是:"+(end-strat)+"ms");}注意看avg的方法,我們先用foreach的方法計(jì)算平均分,結(jié)果如下:
public?static?int?avgForeach(List<Integer> score){int?sum = 0;for(int?i : score){sum+=i;}return?sum/score.size();}接下來我們使用下標(biāo)的方法計(jì)算平均分,結(jié)果如下:
public?static?int?avgIndex(List<Integer> score){int?sum = 0;for(int?i=0;i<score.size();i++){sum+=score.get(i);}return?sum/score.size();}可以看得出來,使用下標(biāo)遍歷的方法要比使用foreach遍歷的方法要快許多
我們僅僅只是統(tǒng)計(jì)平均分,就相差46ms,如果有別的比如加權(quán)平均值、補(bǔ)充平均值等,花費(fèi)時(shí)間會(huì)更長。
需要注意的是,在數(shù)據(jù)量小的情況下,無論哪種方式,性能差異不是很大!
案例靈感來自:《編寫高質(zhì)量代碼:改善java程序的151個(gè)建議》
作者:秦小波
往期精彩
asList方法產(chǎn)生的List對象不可更改
2020-09-29
避開基本類型數(shù)組轉(zhuǎn)換列表陷阱
2020-09-28
java中最值的求法,你可能忽略了這種方法了!
2020-09-27
在明確的場景下,為集合指定初始容量
2020-09-26
警惕數(shù)組的淺拷貝
2020-09-25
若有必要,使用變長數(shù)組
2020-09-24
支持作者
贊賞就不用啦,生活都不易,右下角的“在看/贊”點(diǎn)一下,如果感覺文章不錯(cuò),記得分享到朋友圈讓更多人知道!
點(diǎn)分享
點(diǎn)點(diǎn)贊
點(diǎn)在看
總結(jié)
以上是生活随笔為你收集整理的存放80000000学生成绩的集合,怎么统计平均分性能高的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20级:班级日常分享,一天一瞬间
- 下一篇: 穿越火线对电脑配置要求?