@Override
public int hashCode() {
//return Objects.hash(man,date,voteItems,score);另一种写法但是会有不必要的对象调用,尽量避免
int result = 17;
result = 31 * result + man.hashCode();
result = 31 * result + date.hashCode();
result = 31 * result + voteItems.hashCode();
result = 31 * result + score;
return result;
}
equals相等的对象必须具有相同的hashcode,(若不同则在哈希表中存储位置不同,则查找时出错)不同的对象可以相同但是降低了效率
注意参数Objects.hash是Object…这有两个主要后果:
哈希码计算中使用的原始值必须加框,例如this.id从转换long为Long.
一个Object[]必须创建要调用的方法.
如果hashCode频繁调用,则创建这些"不必要"对象的成本可能会增加.
附
@Override
public boolean equals(Object obj) {
if(! (obj instanceof Vote<?>))
return false;
Vote<C> v = (Vote<C>) obj;
return v.voteItems == voteItems && v.man == man && v.score == score && v.date == date;
}