1

我见过 Apache Commons Lang 的 HashCodeBuilder 和 Eclipse hashCode() 生成。不得不说 Eclipse 的 hashCode() 非常丑陋,但是在性能方面使用 HashCodeBuilder 会更好吗(因为构建器需要额外的对象创建)?

我还想知道您对 equals() 一代和 Commons Lang 的 EqualsBuilder 的看法。

如果您有更好的解决方案,请也发布它们:)

4

3 回答 3

3

HashCodeBuilder比编写自己的哈希函数要慢得多。它使用反射来迭代每个字段。如果您经常调用此方法,您可能会看到性能下降,这对于您的情况可能是可容忍的,也可能是不可容忍的。

eclipse 生成的hashCode函数使用素数来帮助创建更好的哈希函数。为什么在 hashCode 中使用素数?有一些关于为什么会这样的细节

于 2012-06-14T15:39:22.890 回答
0

HashCodeBuilder 和 EqualsBuilder 比默认方法更好,但是如果你关心性能,最好自己编写 hashcode 和 equals 方法。这是因为它们使用反射方法。

规则是

相等的对象应该产生相同的哈希码,相等的哈希码并不意味着对象相等

于 2012-06-14T15:41:29.860 回答
0

您必须在这里在性能和可维护性之间做出选择。commons 版本会适应类的变化,但速度较慢。Eclipse生成的版本很快,但是添加新字段后就不会更新了,维护起来比较困难。

于 2012-06-16T14:03:13.857 回答