Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java问题重用列表以填充HashMap_Java_Arraylist_Collections_Hashmap_Nested - Fatal编程技术网

Java问题重用列表以填充HashMap

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;

我尝试在java中设置HashMap值,同时尝试重用arrayList。我以前没有使用过HashMaps,现在仍然在思考这个问题,所以请记住我有限的知识

班级学生:

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<>();