問題我有一個單個元素的Set<SelectDTO>
和我使用它和一個新的SelectDTO。載有失敗的時候,如下:與集<>包含和hashCode
Set<SelectDTO> setDTOs = new HashSet<SelectDTO>
//processing where an element with <name = "ME101", id = 102> is added.
SelectDTO selectDTO = new SelectDTO();
selectDTO.setName("ME101");
selectDTO.setId(102);
if (!setDTOs.contains(selectDTO)){
throw new Exception();
}
我有覆蓋SelectDTO的.hashCode()
,因此它被計算爲參數id和名稱的總和。我已調試並確認執行兩次:.hashCode()
:第一次將元素添加到集合中,第二次調用.contains()
。這兩個元素的hashCode是-2024486876。而且,在調試時,我發現該集合中的表具有單個元素,其「散列」爲-1909995738。
這是我的hashCode的代碼,雖然我不認爲這個問題的存在:
@Override
public int hashCode() {
int result = 0;
result += this.getName() != null ? this.getName().hashCode() : 0;
result += this.getId() != null ? this.getId() : 0;
return result;
}
我想這.contains()
使用此「哈希」值進行比較,但我不知道爲什麼。
就是這樣。 'equals()'已經被覆蓋,我認爲它是比較字段,但它看起來像是比較引用。謝謝。 –