2017-06-17 3 views
1

学生評価のジャーナルがあるとします。各学生は、ある日、雑誌に各科目の印を付けています。特定の日付までに学生の印を付けるより良い方法はありますか?java - クラスの雑誌に学生の評価を保存するためのより良い方法

私はHashMap<Student, HashMap<Subject, ArrayList<Integer>>>にこのデータを保存しようとした(question私の前)が、私はこの方法が効率的でかさばらないと思います。

これを作成/読み取り/更新/削除アクションで効率的に保存する方法はありますか?私はクラスのマークや別のクラスを整理する方法をヒントを得ることがうれしいです。

public class Mark { 

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

    //getters & setters 
} 

これは、任意のCollection<Mark> marks使用してフィルタリング方法から具体的な学生のすべてのマークを取得できるようになります(guave LIBSが提供するグーグル:

+1

あなたはおそらくOO用語で、さらに抽象 –

答えて

3

あなたの問題への最も簡単な解決策は、次のフィールドを持つマーク・クラスを持つことですこのようなAPIは、Java 8の場合、今のところjava.util.streamにあるように簡単に処理できます)。すでに具体的な学生でソートマークを使用してデータ構造を持っていることを喜んでいる場合

それにもかかわらず、私はStudentMarkとの後方の関係を実装することをお勧め:

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. Javaの主な機能の1つ - 強いタイピングを使用します。コンパイル時に、クライアントコードがStudentPerformance型ではないものを受け入れないことが保証されていることを意味します。大規模なプロジェクトではバグを避けることができます。

最後に、具体的な解決策は常にアプリケーションのニーズに依存しています。銀色の弾丸はありません。

+0

を行う必要があるが、学生は* *マークを持っています。'StudentPerformance'クラスは必要ありません。データベース設計を考えています。 – NickL

+0

ありがとう、私はあなたに同意します。それは、Student内の変数にマークを保持するためのより良い解決策です。私は自分の答えを編集するだろう。 –

1

ハッシュマップで複雑なキーを使用するのは良い考えではないと思います。

私はこのようなものだろう:

class Evaluation { 
    private Subject Subject; 
    private Date date; 
    private List<Mark> marks; 

    //getters & setters 
} 

class Mark { 
    Student student; 
    int score; 

    //getters & setters 
} 

をだから今のクラスでは、あなたが持っているでしょう:

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

    ... 
} 
関連する問題