存放80000000学生成绩的集合,怎么统计平均分性能高

大家好,我是雄雄,好久不介绍一下我,就被大家淡忘了……

我们都知道,遍历集合的方式最常用的有两种,一种是使用下标的方式遍历,第二种便是使用foreach遍历,代码分别如下:

使用下标的方法:

public static void testGetIndex(){int num = 5;//声明集合List<Integer> lists = new ArrayList<Integer>(num);//给集合中赋值(0-150之间的随机数)for (int i = 0; i < num; i++) {lists.add(new Random().nextInt(150));}//使用下标遍历for (int i = 0; i < lists.size(); i++) {System.out.print(lists.get(i)+" ");}}

结果如下:

使用foreach的方法:

public static void testForeach(){int num = 5;//声明集合List<Integer> lists = new ArrayList<Integer>(num);//给集合中赋值(0-150之间的随机数)for (int i = 0; i < num; i++) {lists.add(new Random().nextInt(150));}//使用下标遍历for (int i :lists) {System.out.print(i+" ");}}

结果如下:

我们可以看到,这种方法在表面看起来区别不是很大,甚至可以说foreach遍历的方法要比下标遍历的方式还要简单。

那如果我们从另一角度——比如性能方面来看它两的区别呢,谁又更胜一筹?

下面我们来结合案例具体分析一下两种方法在性能方面的差异:

某市有80000000学生,在某一次市内组织的考试后,接上面指示,需要对本市8千万学生的成绩进行统计并计算平均分。

案例很简单,无外乎就是将8千万学生的成绩加起来除以8千万,代码如下:

public static void test1(){int num = 80*100000;List<Integer> score = new ArrayList<Integer>(num);//随机生成分数赋值到集合中for(int i= 0;i<num;i++){score.add(new Random().nextInt(150));}//开始记录时间long strat = System.currentTimeMillis();System.out.println("平均分是:"+avgForeach(score));long end = System.currentTimeMillis();System.out.println("执行时间是:"+(end-strat)+"ms");}

注意看avg的方法,我们先用foreach的方法计算平均分,结果如下:

public static int avgForeach(List<Integer> score){int sum = 0;for(int i : score){sum+=i;}return sum/score.size();}

接下来我们使用下标的方法计算平均分,结果如下:

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();}

可以看得出来,使用下标遍历的方法要比使用foreach遍历的方法要快许多

我们仅仅只是统计平均分,就相差46ms,如果有别的比如加权平均值、补充平均值等,花费时间会更长。

需要注意的是,在数据量小的情况下,无论哪种方式,性能差异不是很大!

案例灵感来自:《编写高质量代码:改善java程序的151个建议》

作者:秦小波

往期精彩

asList方法产生的List对象不可更改

2020-09-29

避开基本类型数组转换列表陷阱

2020-09-28

java中最值的求法,你可能忽略了这种方法了!

2020-09-27

在明确的场景下,为集合指定初始容量

2020-09-26

警惕数组的浅拷贝

2020-09-25

若有必要,使用变长数组

2020-09-24

支持作者

赞赏就不用啦,生活都不易,右下角的“在看/赞”点一下,如果感觉文章不错,记得分享到朋友圈让更多人知道!

点分享

点点赞

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组元素的默认值

数组元素的默认值 数组元素是整型&#xff1a;0 数组元素是浮点型&#xff1a;0.0 数组元素是char型&#xff1a;0或’\u0000’&#xff0c;而非’0’ 数组元素是boolean型&#xff1a;false 数组元素是引用数据类型&#xff1a;null eg 非数组元素必须初始化后才能进行使用…

ssl初一组周六模拟赛【2018.3.10】

前言 先说一下成绩&#xff08;因某人要求去掉了某人&#xff09;&#xff1a; 姓名成绩xjq280wyc200(本人)lrz200zyc100hjq40lw30hzb0 正题 题目1&#xff1a;Clocest &#xff08;ssl2574&#xff09; 贪心30分&#xff0c;改后100分dfs 链接&#xff1a; http://blog.c…

如何重构箭头型代码

转载自 如何重构"箭头型"代码 本文主要起因是&#xff0c;一次在微博上和朋友关于嵌套好几层的if-else语句的代码重构的讨论&#xff0c;在微博上大家有各式各样的问题和想法。按道理来说这些都是编程的基本功&#xff0c;似乎不太值得写一篇文章&#xff0c;不过我…

SpringMVC的上传与下载

文章目录SpringMVC的上传SpringMVC的下载SpringMVC的上传 [1] 上传的功能需求 随着我们互联网的发展&#xff0c;我们的用户从直接访问网站获取信息。变为希望将自己本地的 资源发送给服务器&#xff0c;让服务器提供给其他人使用或者查看。还有部分的用户希望可以将 本地的资…

中秋节支付宝口令红包解析

大家好&#xff0c;我是雄雄。继上篇文章&#xff08;10.1日&#xff09;发完之后就没有再日更公众号了&#xff0c;给自己也放几天假。这个假期实在是太太太长了&#xff0c;放的我都心气憔悴&#xff01;出去玩吧&#xff0c;没地儿去&#xff0c;在家吧&#xff0c;除了看书…

asp.net core高级应用:TagHelper+Form

上一篇博客《asp.net core新特性(1):TagHelper》我讲解了TagHelper的基本用法和自定义标签的生成&#xff0c;那么我就趁热打铁&#xff0c;和大家分享一下TagHelper的高级用法~~&#xff0c;大家也可以在我的博客下随意留言。对于初步接触asp.net core的骚年可以看看我对TagHe…

爸妈没多大本事……

本文原创&#xff1a;王晓丹世界上什么都不公平&#xff0c;唯独时间最公平&#xff0c;你是懒惰还是勤奋&#xff0c;时间都会给出结果。每个人都是孤独的&#xff0c;你的人生不会辜负你的。那些流下的泪和那些辛苦的汗水 全都让你成为一个独一无二的自己。把懒惰放一边 &…

我终于搞清楚了和String有关的那点事儿

转载自 我终于搞清楚了和String有关的那点事儿 String&#xff0c;是Java中除了基本数据类型以外&#xff0c;最为重要的一个类型了。很多人会认为他比较简单。但是和String有关的面试题有很多&#xff0c;下面我随便找两道面试题&#xff0c;看看你能不能都答对&#xff1a…

SpringMVC的拦截器

文章目录SpringMVC的拦截器学习SpringMVC的拦截器学习 [1] SpringMVC拦截器的介绍 问题: 在之前学习Servlet的时候&#xff0c;我们学习了过滤器的知识。过滤器的作用是保护 请求的服务器资源&#xff0c;在请求资源被执行之前&#xff0c;如果请求地址符合拦截范围&#xff…

考研英语二大纲22年考研

全国硕士研究生招生考试英语(二)考试大纲(非英语专业)(2022年版)   I.考试性质   英语(一)考试是为高等学校和科研院所招收硕士研究生而设置的具有选拔性质的全国统一入学考试科目&#xff0c;其目的是科学、公平、有效地测试考生对英语语言的运用能力&#xff0c;评价的标…

ssl1763-观光旅游【最小环,Floyd,dijkstra】

正题 就是给出一个无向图&#xff0c;求最小环。 输入输出&#xff08;需要自取&#xff09; Input 每组数据的第一行包含两个正整数&#xff1a;十字路口的个数N(N<100)&#xff0c;另一个是道路的 数目M(M<10000)。接下来的每一行描述一条路&#xff1a;每一行有三个…

物联网模式下的多活数据中心架构认识与实践

做互联网应用很重要的一点是要保证服务可用性&#xff0c;特别是某些业务更是需要7*24小时不间断的对外提供服务&#xff0c;任何停机、宕机都会引起大面积的用户不满。持续可用性是把业务服务化时一个需要考虑的重要指标&#xff0c;很多时候我们都会牺牲一些功能来换取可用性…

subList?? subString???

今天看到了java中List中有个subList方法&#xff0c;感觉很熟悉有没有&#xff1f;没错&#xff0c;在Stirng类中&#xff0c;也有个类似的方法&#xff1a;subString。1String类的subStringString中的subString方法&#xff0c;官方解释是&#xff1a;返回字符串的子字符串&am…

互联网级监控系统必备-时序数据库之Influxdb集群及踩过的坑

上篇博文中&#xff0c;我们介绍了做互联网级监控系统的必备-Influxdb的关键特性、数据读写、应用场景&#xff1a;互联网级监控系统必备-时序数据库之Influxdb 本文中&#xff0c;我们介绍Influxdb数据库集群的搭建&#xff0c;同时分享一下我们使用集群遇到的坑&#xff01;…

考研数学二大纲22年考研

考试科目&#xff1a;高等数学、线性代数   考试形式和试卷结构   一、试卷满分及考试时间   试卷满分为150分&#xff0c;考试时间为180分钟.   二、答题方式   答题方式为闭卷、笔试.   三、试卷内容结构   高等教学 约80%   线性代数 约20%   四、试卷题…

ssl1500-最短路上的统计【Floyd】

正题 个无向图上&#xff0c;没有自环&#xff0c;所有边的权值均为1&#xff0c;对于一个点对&#xff08;a,b&#xff09;,我们要把所有a与b之间所有最短路上的点的总个数输出。 输入输出&#xff08;需要自取&#xff09; Input 第一行n,m,表示n个点&#xff0c;m条边 接…

Java中的subList方法

Java中的subList方法 今天看到了java中List中有个subList的方法&#xff0c;感觉很熟悉有没有&#xff1f;没错&#xff0c;在Stirng类中&#xff0c;也有个类似的方法&#xff1a;subString。 Stirng中的subString方法&#xff0c;官方解释是&#xff1a;返回字符串的子字符串…

考研408大纲22年考研

I 考试性质   计算机学科专业基础综合考试是为高等院校和科研院所招收计算机科学与 技术学科的硕士研究生而设置的具有选拔性质的联考科目&#xff0c;其目的是科学、公平、 有效地测试考生掌握计算机科学与技术学科大学本科阶段专业知识、基本理论、 基本方法的水平和分析问…

在Apworks数据服务中使用基于Entity Framework Core的仓储(Repository)实现

《在ASP.NET Core中使用Apworks快速开发数据服务》一文中&#xff0c;我介绍了如何使用Apworks框架的数据服务来快速构建用于查询和管理数据模型的RESTful API&#xff0c;通过该文的介绍&#xff0c;你会看到&#xff0c;使用Apworks框架开发数据服务是何等简单快捷&#xff0…

再有人问你Java内存模型是什么,就把这篇文章发给他

转载自 再有人问你Java内存模型是什么&#xff0c;就把这篇文章发给他 前几天&#xff0c;发了一篇文章&#xff0c;介绍了一下JVM内存结构、Java内存模型以及Java对象模型之间的区别。有很多小伙伴反馈希望可以深入的讲解下每个知识点。Java内存模型&#xff0c;是这三个知识…