2016-05-17 146 views
0

我有一个快速的问题,我在这里要做的是,从哈希映射中获得学生,并为学生的标记添加一个双标记。java改变哈希映射的值

可以说我有一个名为Student和Student类的类具有名为addToMark()和Hashmap的方法,名为theStudent = new HashMap<String, Student>

public void addExtraMark(String studentNumber, double mark) { 
    if(stuentNumber != null && mark >= 0) { 
     Student extraMark = theStudent.get(studentNumber); 
     extraMark.addToMark(mark)}; 
    } 
} 

我的问题是,标记是否增加了散列表?自动?或者我必须使用

theStudent.put(studentNumber, extraMark); 

我的代码底部?

回答

2

由于Student extraMark是对该学生的引用,因此对引用做的任何操作都将反映在HashMap中。

不,你没有拨打电话:

theStudent.put(studentNumber, extraMark); 
1

在此代码:

Student extraMark = theStudent.get(studentNumber); 
extraMark.addToMark(mark)}}; 

如果studentNumber不散列图存在,get回报null。然后extraMark.addToMark会抛出一个NullPointerException

所以,你必须检查自己,例如:

Student extraMark; 
if (theStudent.containsKey(studentNumber)) { 
    extraMark = theStudent.get(studentNumber); 
} else { 
    extraMark = new Student(.......); 
    theStudent.put(studentNumber, extraMark); 
} 
extraMark.addToMark(mark); 

,或者你做get第一和检查结果为null

注:我假设你的问题“确实增加了hashmap”意味着“如果它不在那里,它是否会向hashmap添加一个新学生”,但是在重读你的问题之后,米不清楚你的意思。