【问题标题】:Commons Lang HashCodeBuilder vs. Eclipse hashCode() generationCommons Lang HashCodeBuilder 与 Eclipse hashCode() 生成
【发布时间】:2012-06-17 16:33:23
【问题描述】:

我见过 Apache Commons Lang 的 HashCodeBuilder 和 Eclipse hashCode() 生成。不得不说Eclipse的hashCode()很丑,但是作为HashCodeBuilder在性能上是不是更好(因为builder需要额外创建对象)?

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

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

【问题讨论】:

  • 也许这对 Programmers.SE 来说是一个更好的问题。
  • eclipse的hashCode是什么意思?
  • Eclipse 在Source meu 下有一个名为Generate hashCode() and equals() 的函数,它允许您通过选择要生成hashCode 的字段来生成方法。

标签: java eclipse equals apache-commons hashcode


【解决方案1】:

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

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

【讨论】:

  • 我想用 append() 方法手动附加我想要的每个字段,而不是反射方法。还是不使用附加字段的hashCode(),通过反射计算hashCode?​​span>
  • 如果您使用的是 appendMethod,那么它看起来好像不使用反射。
【解决方案2】:

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

规则是

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      相关资源
      最近更新 更多