Java集合-映射和集:无法应用put

Java集合-映射和集:无法应用put,java,collections,maps,set,Java,Collections,Maps,Set,我在一些代码上遇到了问题。我正在尝试创建一个学生数据库。我需要创建一组由课程名称表示的学生。课程名称将映射到学生集。我曾尝试编写'add'方法,但当我尝试将其放入数据库时,我收到一条错误消息:java.util.Map>中的put(java.lang.String,java.util.Set)无法应用于(java.lang.Integer,StudentDatabase.Student)。非常感谢您的帮助 导入java.util.* 公共班级学生数据库{ private Map<Strin

我在一些代码上遇到了问题。我正在尝试创建一个学生数据库。我需要创建一组由课程名称表示的学生。课程名称将映射到学生集。我曾尝试编写'add'方法,但当我尝试将其放入数据库时,我收到一条错误消息:java.util.Map>中的put(java.lang.String,java.util.Set)无法应用于(java.lang.Integer,StudentDatabase.Student)。非常感谢您的帮助

导入java.util.*

公共班级学生数据库{

private Map<String, Set<Integer>> database = new TreeMap<String, Set<Integer>>();

private static class Student extends TreeSet<Integer> {
    public int id;

    public Student(int id){
        this.id = id;
    }
}

public void add(String courseName, Integer student) {
    /* I've tried to use this way to add to the database and it doesn't work too.
    Set<Integer> studentSet = database.get(courseName);
    if (studentSet == null){
        studentSet = new TreeSet<Integer>();
    }
    studentSet.add(student);
    database.put(courseName, student);
    */

   Integer idInt = new Integer(idInt);
   if (database.containsKey(idInt)){
       //if the student is a duplicate, that is ok
    }
    else{
        Student info = new Student(idInt);
        database.put(new Integer(idInt), info);
    }
} // end add
private Map database=new TreeMap();
私有静态类学生扩展TreeSet{
公共int id;
公立学生(国际id){
this.id=id;
}
}
公共空添加(字符串courseName,整数学生){
/*我试着用这种方法来添加到数据库中,但效果不太好。
Set studentSet=database.get(courseName);
if(studentSet==null){
studentSet=新树集();
}
studentSet.add(学生);
数据库。put(课程名称,学生);
*/
整数idit=新整数(idit);
if(database.containsKey(idit)){
//如果学生是重复的,那就可以了
}
否则{
学生信息=新学生(IDIT);
database.put(新整数(idit),info);
}
}//结束添加

}答案在错误消息中是正确的:
无法将java.util.Map>中的put(java.lang.String,java.util.Set)应用于(java.lang.Integer,StudentDatabase.Student)
。第二个列表中的哪种类型与第一个列表中的类型不匹配?

您需要将
Map#put
的参数类型与您的声明匹配
Map

Student info=新学生(idit);
设置searchMap=database.get(courseName);
if(searchMap==null){
searchMap=newhashset();
}
add(新整数(idInt));
数据库.put(courseName,searchMap);

我刚刚构建了一些与您所做的几乎完全相同的东西。添加一些注释,解释集合存储的内容以及映射的内容,我可以提供帮助。这是学校的项目吗?如果是,请发布作业链接(如果可用)。该集合存储学生id号。每门课程都表示为一组学生id号。数据库必须从课程名称映射到id集。我认为它非常简单,我可以帮助您。但是我无法获取你的add方法中的idit是什么?请提供一些细节。对不起,我不明白。。。如果您能详细说明,我将不胜感激..我现在得到非法的开始类型:searchMap=newhashset();有没有办法绕过“变量IDIT可能尚未初始化”的问题?我尝试将其初始化为null,但没有任何更改OK,已更新。还请阅读初始化期间无法初始化的变量。您确定不想使用
student
?将其称为
studentID
会比较容易混淆。
Student info = new Student(idInt);
Set<Integer> searchMap = database.get(courseName);
if (searchMap == null) {
   searchMap = new HashSet<String>();
}

searchMap.add(new Integer(idInt));
database.put(courseName, searchMap);