我有一个Set<SelectDTO>
带有单个元素的元素,但在使用 .contains 和一个新的 SelectDTO 时失败了,如下所示:
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's .hashCode()
,因此它被计算为参数 id 和 name 的总和。我已经调试并确认执行经历了.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()
是使用这个“哈希”值来比较,但我不知道为什么。