有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

双元素列表的java效率

我想制作一个有列表的程序来管理一些学校科目的成绩。为此,我考虑创建一个包含两个值而不是一个值的列表。因此,每个节点都会有一个包含等级和相应科目的列表。随后,为了计算一个科目的平均成绩,我必须通过平均该科目的所有成绩来滚动整个列表。然而,这种方法似乎不是很有效,因为我每次都要浏览整个列表。那么从概念上讲,有没有更有效或更舒适的方法来完成这个项目呢

编辑:

例如,我可以列出所有科目和每个科目的成绩列表。因此,我不再浏览所有的成绩,而只浏览单个相关科目的成绩。这种方法会更有效吗?是否有其他方法始终使用列表

谢谢你的回复


共 (1) 个答案

  1. # 1 楼答案

    I thought of creating a list with two values instead of one. So there would be a list with the grade and the corresponding subject for each node.

    您所描述的,一个事物指向其伙伴事物的配对,在Java中被称为Map,在某些环境中也被隐喻为“字典”

    However, this method does not seem very efficient since I have to go through the whole list every time. So conceptually, is there any more efficient or more comfortable way to do this program?

    无论您如何构建数据,无论何时您想要报告数据,例如计算总计或平均值,您都需要遍历数据

    如果您需要多次对不改变的数据进行多次报告,并且证明该循环的性能(不假设)对应用程序的性能有重大影响,那么考虑将您的结果的副本缓存在另一个数据结构中。p>

    不要落入过早优化的陷阱。对于您考虑过的所有情况,对于中小型数据量,循环的效率对于现代计算机硬件来说都不重要

    在面向对象编程中,我们通常选择将数据打包为类定义的对象,而不是在列表或数组中管理原始数据。我建议你首先定义一个类来保存你的学生标识符、科目和成绩。收集该类的对象,然后报告该集合

    提示:在下个月发布的Java16中,您可以使用record更简单地编写一个类,其主要目的是透明且不可变地传输数据。编译器隐式地提供构造函数、getter、equals&hashCodetoString

    public record Grade ( UUID studentId , String courseCode , String grading ){}