【发布时间】:2021-03-23 16:44:06
【问题描述】:
如果我正在编写一个Employee 类,它将保存在一些基于哈希的集合中,如 hashmap/hashset。 Employee 对象 int hashcode() 实现是否应该避免或鼓励散列冲突?特别是对于插入和检索的性能
【问题讨论】:
-
避开它们,碰撞越多,使用速度就越慢。事实上,就像
equals一样,您可以使用所有字段,因此没有“尝试做或不尝试”,只有所有字段 -
除非您的作业特别要求您编写自己的 hashCode 算法,否则最好使用现有的。例如,Employee.hashCode 可能只是做
return this.employeeID.hashCode();或return Objects.hash(firstName, lastName, jobTitle);。请记住,它需要基于equals(Object)检查的相同属性。 -
您可以计算
equals使用的属性子集的哈希值;这只是意味着可能在不相等的对象上发生哈希冲突。这是完全合法的。通常这不是一个好主意,但在某些情况下可能是有原因的(例如,性能,在您判断由于省略字段不太可能发生冲突的情况下)。 -
这能回答你的问题吗? What Exactly is Hash Collision