Commons Lang HashCodeBuilder与Eclipse hashCode()生成

时间:2012-06-14 15:36:31

标签: java eclipse equals apache-commons hashcode

我已经看过Apache Commons Lang的HashCodeBuilder和Eclipse hashCode()生成。我不得不说Eclipse的hashCode()非常难看,但是在性能方面最好用作HashCodeBuilder(因为构建器需要额外的对象创建)?

我也想知道你对equals()生成和Commons Lang的EqualsBuilder的看法。

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

3 个答案:

答案 0 :(得分:3)

HashCodeBuilder比编写自己的哈希函数慢得多。它使用反射迭代每个字段。如果您经常调用此方法,您可能会看到性能损失,这可能会或可能不会对您的情况造成影响。

eclipse生成的hashCode函数使用素数来帮助创建更好的哈希函数。 Why use a prime number in hashCode?有一些关于原因的详细信息

答案 1 :(得分:0)

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

规则是

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

答案 2 :(得分:0)

您必须在此处选择性能和可维护性。公共版本将适应类的变化,但速度较慢。 Eclipse生成的版本很快,但在添加新字段后不会更新,这使得维护更加困难。