我有代碼,如下所示:問題與使用哈希映射與自定義內部類
private void MethodToDo(SpecialObject o) {
Map<InfoObj, Integer> totalNeeds = new HashMap<InfoObj, Integer>();
for (ListObject obj : o.getListOfObjects()) {
InfoObj infoObj = new InfoObj(obj.getTitle(), obj.getId());
Integer need = totalNeeds.get(infoObj);
if (need == null) {
need = new Integer(obj.getNeeded());
} else {
need = need + obj.getNeeded();
}
totalNeeds.put(infoObj, need);
}
}
的目的是一種私有內部類(在相同的類作爲方法),看起來像這樣:
private class InfoObj {
private String title;
private Integer id;
public InfoObj(String title, Integer id) {
this.title = title;
this.id = id;
}
public String getTitle() {
return title;
}
public Integer getId() {
return id;
}
@Override
public boolean equals(Object io2) {
if (this == io2) { return true; }
if (!(io2 instanceof InfoObj)) { return false; }
InfoObj temp = (InfoObj) io2;
return this.id.equals(temp.id) && this.title.equals(temp.title);
}
@Override
public int hashCode() {
final int prime = 7;
int result = 1;
result = prime * result
+ ((this.title == null) ? 0 : this.title.hashCode());
result = prime * result
+ ((this.id == null) ? 0 : this.id.hashCode());
return result;
}
然而,儘管重寫equals和hashCode方法,HashMap中仍然會包含重複鍵(如標題和id是等效的......但在多個地方仍然顯示)。我認爲我正確地做了一切,但意識到我可能會錯過一些東西...
另外,我知道有重複鍵,因爲我通過keySet循環並輸出結果,導致對象具有相同的標題和id多次出現。
*重複結果*表示重複鍵或重複值? –
你有一個顯示重複鍵的SSCCE嗎?你確定有重複嗎? – jzd
不要相信這和InfoObj有什麼關係。你的hashCode()被調用了嗎? –