【发布时间】:2015-11-04 09:41:58
【问题描述】:
以下两种情况有什么区别:
1) 覆盖 hashCode 以返回 1,不要覆盖 equals
2) 覆盖hashCode返回1,覆盖等于
编辑:
第二种情况是众所周知的——这种映射的性能下降到 LinkedList 的性能,它是 O(n) 而不是 log(n)。第一种情况更有趣。 Eran 确认没有明显违反合同,但此地图无法使用。
【问题讨论】:
-
如果所有内容都有哈希码 1,那么这是一个有效但糟糕的哈希码,因为该类型的所有内容将始终落入同一个哈希桶中。
-
你确定吗? equals 的实现方式没有区别吗?
-
hashCode是一种确定两个对象是否不相等的快速方法:如果它们的hashCodes 不匹配,则表示没有办法他们可以平等;然而,这并没有说明它们是否是相等。