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

我们都知道,遍历集合的方式最常用的有两种,一种是使用下标的方式遍历,第二种便是使用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

支持作者

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

点分享

点点赞

点在看

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

  1. Excel下的数据挖掘:学生成绩统计分析实战之统计分数段人数

    第2章 统计分数段人数 2.1 利用数据透视数据表统计分数段 实例2-1 1.操作步骤 2.2利用countifs函数统计各分数段人数 * 实例2-2 2.3用其它函数统计分数段人数    对成绩进行 ...

  2. 未来星计算机一级分数截图,学生成绩统计与分析系统2.0(全新升级)

    学生成绩统计与分析系统2.0 本系统主要利用Excel VBA编程设计而成,用于中小学学校一个年级的成绩统计与分析.软件集学生成绩的录入.统计计算.图表绘制.考场编排.数据导出.数据查询.数据打印.生 ...

  3. c语言按学号查询学生排名极其考试成绩,C语言--学生成绩管理系统

    某班最多有不超过30人(具体人数由键盘输入)参加某门课程的考试.用一维数组作函数参数实现如下学生成绩管理: (1)录入每个学生学号和考试成绩: (2)计算课程的总分和平均分: (3)按成绩由高到低排出 ...

  4. C++课程设计 学生成绩管理系统

    学生成绩管理系统 1.编译器 2.系统功能需求分析 2.1学生成绩管理系统需求分析 2.2三个类功能需求分析 2.2.1 Person类 2.2.2 Student类 2.2.3 Undergradu ...

  5. 学生成绩计算的c语言,学生成绩标准管理系统C语言.doc

    福建工程学院计算机和信息科学系 试验汇报 20XX – 20XX 年第 1 学期 任课老师: 章静 课程名称 结构化程序综合设计 班级 计算机1001 座号 姓名 张扬文 试验题目 学生成绩管理系统 ...

  6. 【数据分析】基于matlab GUI学生成绩管理系统【含Matlab源码 1981期】

    ⛄一.案例简介(仅供参考) 1 设计目标 1.1 设计一个基于GUI的学生成绩管理与分析系统 (1)设计一个插入背景的登录界面 (2)以某班某课成绩为研究对象,设计几个对话框,实现: 1.2 查询功能 ...

  7. C语言学生成绩管理系统详解

    文章目录 一.系统概述 二.数据类型 三.自定义函数说明 四.运行界面 五.源代码 源代码请直接跳到最后 引言:最近写了C语言的大作业,感觉做得还行,记录一下,给后人一些参考,给自己留更深印象方便后续 ...

  8. 学生成绩管理设计要求

    2.课程设计报告书要求(学生成绩管理系统) (1)封面 <C++课程设计> 课程设计题目:学生成绩管理系统 指导教师:周志德 学生班级:网络30331 学生姓名:包文广 学生学号: (2) ...

  9. 《C语言及程序设计》实践参考——学生成绩统计

    返回:贺老师课程教学链接 [项目1-学生成绩统计] 每位同学的信息学号.姓名.C.高数.英语成绩.定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[13]).姓名(name).三 ...

最新文章

  1. 【Live555】live555源码详解(二):BasicHashTable、DelayQueue、HandlerSet
  2. python中打开文件提示编码当时错误_Python:文件编码错误
  3. vue修改代码同步页面_vue实现两个组件之间数据共享和修改操作
  4. c++用向量给句子排序_用C ++对向量排序
  5. 方舟生存计划怎么删除服务器信息,方舟进化生存怎么删服务器存档
  6. 华为数据中心产品汇总介绍
  7. linux服务器ftp连接失败的原因,错误:无法与 SFTP 服务器建立 FTP 连接
  8. 阿里 java 电话面试_阿里Java开发电话面试经历--惨败
  9. excel在线_图片转Excel表格在线工具,分享几款不错的工具
  10. FLASH闪存文件系统研究
  11. 移动硬盘写保护,无法格式化的解决办法。
  12. LabVIEW控制Arduino驱动1602液晶显示屏(基础篇—10)
  13. c++直角空心三角形_压轴题中对三角形中位线的另类诠释
  14. 几个常见网络故障修复命令
  15. linux 查看非法用户登录,用短信报警来监控linux系统的非法登录用户
  16. 自适应移动端网页显示
  17. EA周报 | 阿里港交所上市筹集资金可达200亿美元;预测华为自主系统“鸿蒙”手机10月上市;上海证券交易所科创板正式开板...
  18. Python密码库Cryptography探究学习
  19. 苹果xr如何关机_iPhone X强制关机集合
  20. error: expected ‘}’ at end of input的一种可能解决方法

热门文章

  1. SpringCloud + Docker
  2. vue2实践揭秘pdf_《Vue2.0 实践揭秘》终于出版啦!
  3. word List36
  4. AtCoder Regular Contest 125
  5. P4127 [AHOI2009]同类分布 数位dp + 对状态剪枝
  6. HDU - 5877 Weak Pair (dfs序+树状数组+离散化)
  7. 2021银川Problem D. Farm(不保证正确性)
  8. NC51189 Mondriaan‘s Dream
  9. P5445-[APIO2019]路灯【set,树状数组套线段树】
  10. P2048-[NOI2010]超级钢琴【RMQ,堆】