Java中的通用哈希码

时间:2014-08-20 21:13:36

标签: java hashcode

我对Java有些新意。是否有一个哈希码实用程序类可以为类中包含任意类型成员的泛型对象生成一个好的哈希代码?我可以递归地逐步执行通用java对象的实例并累积一个哈希代码,以保证此类的两个相等对象将始终计算相同的哈希代码吗? 这个问题的上下文是Android,我正在使用的Java版本中无法使用Objects.hashCode()等(我没有选择迁移到更新的版本)。 我猜测答案是根据我目前所看到的情况而定的。

4 个答案:

答案 0 :(得分:10)

从Java 7开始,您有Objects.hash()

return Objects.hash(this.foo, this.bar, this.baz);

它还有助于实现等于:

return Objects.equals(this.foo, o.foo)
       && Objects.equals(this.bar, o.baz)
       && Objects.equals(this.baz, o.baz)

答案 1 :(得分:4)

你可以试试Apache Commons Lang的HashCodeBuilder。它能够反射生成哈希码,如下所示:

public int hashCode() {
    return HashCodeBuilder.reflectionHashCode(this);
}

答案 2 :(得分:1)

Apache Commons-Lang项目中有一个帮助类,名为HashCodeBuilder。您可以在所需的每个hashCode中使用它,或者您可以使用反射(可能在其他库的帮助下,如果您遵循某些模式,如Java Bean)以递归方式迭代字段 - 但必须是非常小心地定义何时停止并避免无限循环。

答案 3 :(得分:0)

我建议每天使用Guava 。你需要的是Hasher