2017-12-11 12 views
0

arrayListを再利用しようとしている間に、HashMapの値をjavaに設定しようとしています。私は前にHashMapsで仕事をしていなかったし、まだこの周りに私の頭を抱いているので、私の限られた知識を持ってください。Javaの問題リストを再利用してHashMapを設定する

クラスの学生:

public class Student { 

    private static int id = 0; 
    private String name; 
    private String surname; 
    private Map<Subject, List<Grade>> grades; 
    private List<Absence> absences; 
} 

グレードセッター:

public void setGrades(Map<Subject, List<Nota>> grades) { 
    this.grades = grades; 
} 

クラス件名:

public class Subject { 

    private String name; 
} 

クラスグレード:

public class Grade { 

    private Term term; 
    private String letter; 
} 

主なプログラム:

Subject subject = new Subject("History"); 
Map<Subject, List<Grade>> gradeMap = new HashMap<Subject, List<Grade>>(); 
     List <Grade> grades = new ArrayList<Grade>(); 

grades.add(new Grade(Term.FIRST_TERM, 'A')); 
grades.add(new Grade(Term.SECOND_TERM, 'F')); 
grades.add(new Grade(Term.THIRD_TERM, 'B')); 
gradeMap.put(subject, grades); 

student1.setGrades(gradeMap); 

キーと値を印刷テスト:

for(Map.Entry<Subject, List<Grade>> t :student1.getGrades().entrySet()){ 
      Subject key = t.getKey(); 
      for (Grade grade : t.getValue()) { 
       System.out.println(key.getName() + " - " + grade.getNumber()); 
      }   
     } 

しかし、私は、ArrayListのを再利用しようとするたびに、そのグレードの設定必要な多くの学生があるので、私はすべてのデータを失います私STUDENT1インスタンス

grades.clear(); 

私は今、出力が空であるコンソールに印刷をしようとした場合:

for(Map.Entry<Subject, List<Grade>> t :student1.getGrades().entrySet()){ 
      Subject key = t.getKey(); 
      for (Grade grade : t.getValue()) { 
       System.out.println(key.getName() + " - " + grade.getNumber()); 
      }   
     } 

私は本当にこの上の任意のコメントや提案をいただければ幸いです、私は何か間違ったことしなければならないが、私は何を知らない明確に:D

感謝を事前に!

答えて

4

あなたがマップに入れていることは、あなたがまだ持っている同じリストへの参照です。それは(Javaはそうしたことをしないので)コピーを作成しませんでしたが、あなたが保持しているものはまだマップにある同じリストです。あなたは新しいものをしたい場合は、手動で作成する必要があります。

grades = new ArrayList<>(); 

そしてSTUDENT1レコードを持つ1への参照のみより

が実際にそのマップになります。

詳細はIs Java "pass-by-reference" or "pass-by-value"?を参照してください。

+0

ありがとうございます!私はリストを再利用せず、今では完全に動作します。 –

関連する問題