java - 在类日志中存储学生评价的最佳方式

标签 java oop

假设您有一本学生评价日志。某天,每个学生在日记中都有每个科目的一些分数。有没有更好的方法来按特定日期添加学生的分数?

我试图将此数据存储在 HashMap<Student, HashMap<Subject, ArrayList<Integer>>> 中(我之前的 question )但是我觉得这种方式体积大而且效率不够。

class School {
    private List<Classes> classes;

    ...
}

/**
 * Classes contains data of school classes (students, subjects etc)
 */

class Classes {
    private List<Students> students;
    private List<Subjects> subjects;
    private List<Teachers> teachers;

    ...
}

/** 
 * Class Mark is a collection of student marks
 * Contains Mark, Subject and Date values
 */

class Mark {
    private Date date;

    ...
}

有什么想法可以通过创建/读取/更新/删除操作更有效地存储这个吗?我很乐意获得有关如何组织这些类(class)的提示。

最佳答案

解决您问题的最简单方法是让 Mark 类具有以下字段:

public class Mark {

    private Integer value;
    private Date date;
    private Student student;
    private Subject subject;

    //getters & setters
}

这将允许从任何 Collection<Mark> marks 中获取具体学生的所有分数使用过滤方法(google guave 库提供了这样的 API,使用 Java 8 更容易做到,因为它现在在 java.util.stream 中)。

不过,如果您愿意让您的数据结构中的分数已经根据具体学生排序,我建议在 Student 之间实现一个后向关系。和 Mark :

public class Student {

    private Collection<Mark> marks;

    //getters & setters
}

现在您对 Collection<Student> students 进行操作并可能从集合中获得具体学生的分数。

最后,如果你想对一个数据结构进行操作,其标记已经按学生和主题排序,你可以使用额外的抽象:

public class StudentPerformance {

    private Student student;
    private Map<Subject, List<Mark>> marks; //actually it can be implemented
    //with a class as well but let's leave it as it is
    //for the sake of simplicity of the example

    //setters & getters
}

然后将其存储为一个集合:Collection<StudentPerformance> performances

这种解决方案的优点:

  1. 减少客户端代码的冗长
  2. 更具描述性
  3. 您使用了 Java 的主要功能之一 - 强类型。这意味着在编译时保证您的客户端代码不会接受任何非 StudentPerformance 类型的内容。它确实有助于避免大型项目中的错误。

最后,具体的解决方案始终取决于您的应用程序的需求。没有 Elixir 。

关于java - 在类日志中存储学生评价的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44604926/

相关文章:

java - 在java中通过USB将文件从PDA复制到PC

java - 在 Java 中获取输入的最有效方法是什么?

java - 在 Spring Batch 中读取 CSV 数据(创建自定义 LineMapper)

c# - C# 中静态方法的类实例化

java - 如何将参数传递给静态初始化 block

C++ - 模板类中模板函数的单独声明/定义

java - 有没有像Python一样不需要编译器的java IDE?

java - firefox selenium webdriver 错误

c++ - 我的第一个 CPP 程序的问题 - 标题和源代码

Java:从 GUI 获取值