是否有任何情况下,一个类使用不同的类字段集来实现它equals()
和hashCode()
方法是否有意义?
我问,因为我对Netbeans equals()
和hashCode()
生成器感到困惑,在那里你被要求选择分别包含在每个方法中的字段.我总是最终为这两种方法选择相同的字段,但有没有这种情况不是正确的选择?
Jon*_*eet 23
好吧,equals()
必须使用所有使用的字段hashCode()
,否则你可以获得相同对象的不同哈希码.反之亦然 - 您可以选择在选择哈希码时不考虑一个特定字段.这样,您可能会得到两个不相等的对象的相同哈希码,这两个对象仅与"未使用"字段不同(而不是通过自然冲突).你只想知道在你知道碰撞不太可能的情况下,你会在很多地方进行散列.我想这是非常罕见的:)
另一种情况是你有某种自定义的相等比较 - 例如不区分大小写的字符串比较 - 在这里为字段生成哈希码很棘手或者很昂贵.同样,这将导致更多碰撞的可能性,但是有效.
归档时间: |
|
查看次数: |
4056 次 |
最近记录: |