Java问题重用列表以填充HashMap
我尝试在java中设置HashMap值,同时尝试重用arrayList。我以前没有使用过HashMaps,现在仍然在思考这个问题,所以请记住我有限的知识 班级学生:Java问题重用列表以填充HashMap,java,arraylist,collections,hashmap,nested,Java,Arraylist,Collections,Hashmap,Nested,我尝试在java中设置HashMap值,同时尝试重用arrayList。我以前没有使用过HashMaps,现在仍然在思考这个问题,所以请记住我有限的知识 班级学生: public class Student { private static int id = 0; private String name; private String surname; private Map<Subject, List<Grade>> grades;
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 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());
}
}
for(Map.Entry t:student1.getGrades().entrySet()){
Subject key=t.getKey();
对于(等级:t.getValue()){
System.out.println(key.getName()+“-”+grade.getNumber());
}
}
我真的很感激任何关于这方面的评论和建议,很明显我一定是做错了什么,但我不知道是什么:D
提前谢谢 您在地图中输入的内容是对您仍然拥有的同一列表的引用。它没有创建它的副本(因为Java不做这样的事情),您持有的仍然是地图中的同一个列表。如果您想要一个新的,您需要手动创建它:
grades = new ArrayList<>();
grades=newarraylist();
而唯一提到有学生1记录的人确实会出现在那张地图上
有关更多详细信息,请参阅。您在地图中输入的内容是对您仍然拥有的同一列表的引用。它没有创建它的副本(因为Java不做这样的事情),您持有的仍然是地图中的同一个列表。如果您想要一个新的,您需要手动创建它:
grades = new ArrayList<>();
grades=newarraylist();
而且,在地图中,对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());
}
}
grades = new ArrayList<>();