我见过 Apache Commons Lang 的 HashCodeBuilder 和 Eclipse hashCode() 生成。不得不说 Eclipse 的 hashCode() 非常丑陋,但是在性能方面使用 HashCodeBuilder 会更好吗(因为构建器需要额外的对象创建)?
我还想知道您对 equals() 一代和 Commons Lang 的 EqualsBuilder 的看法。
如果您有更好的解决方案,请也发布它们:)
我见过 Apache Commons Lang 的 HashCodeBuilder 和 Eclipse hashCode() 生成。不得不说 Eclipse 的 hashCode() 非常丑陋,但是在性能方面使用 HashCodeBuilder 会更好吗(因为构建器需要额外的对象创建)?
我还想知道您对 equals() 一代和 Commons Lang 的 EqualsBuilder 的看法。
如果您有更好的解决方案,请也发布它们:)
这HashCodeBuilder
比编写自己的哈希函数要慢得多。它使用反射来迭代每个字段。如果您经常调用此方法,您可能会看到性能下降,这对于您的情况可能是可容忍的,也可能是不可容忍的。
eclipse 生成的hashCode
函数使用素数来帮助创建更好的哈希函数。为什么在 hashCode 中使用素数?有一些关于为什么会这样的细节
HashCodeBuilder 和 EqualsBuilder 比默认方法更好,但是如果你关心性能,最好自己编写 hashcode 和 equals 方法。这是因为它们使用反射方法。
规则是
相等的对象应该产生相同的哈希码,相等的哈希码并不意味着对象相等
您必须在这里在性能和可维护性之间做出选择。commons 版本会适应类的变化,但速度较慢。Eclipse生成的版本很快,但是添加新字段后就不会更新了,维护起来比较困难。