Java是否有类似Hashable,Hasher的东西?

Aug*_* Li 0 java hashmap hashcode hashable

对于Hash数据结构,例如HashSet,HashMap等,我们需要实现哈希码。但是,这不是很方便。我们可以改用Hashable或Hasher吗?

这是Swift中的示例:https : //developer.apple.com/documentation/swift/hashable

Gho*_*ica 5

在Java中,基本上有多种方法:

  • 您只是“保留” hashCode()从Object继承的方法(不是一个非常好的选择,因为它会忽略您的字段)
  • 您可以使用Objects.hashCode()计算字段的哈希值,然后hashCode()在自定义类中对@Override进行处理时使用该哈希值。正如用户Andreas指出的那样,该解决方案的一个缺点是,使用此方法处理原始类型值时,自动装箱绕行。
  • 您还可以使用Apache Commons HashCodeBuilder。最大的优点是:该类自动使用反射来检索所有字段值以进行哈希处理。缺点:反射容易出错,并且会对性能产生重大影响。但这仍然是一个有趣的选择,例如,在处理“数据持有者”或“ bean类”时,它们基本上只是具有getter和setter的字段的容器。

除此之外:您当然可以hashCode()为需要的每个类重写自己,并“手动”计算字段中的哈希。或告诉您的IDE为您执行此操作。

最后,更进一步,JVM平台允许Lombok之类的库在编译阶段自动插入此类方法覆盖。甚至甚至可以将像kotlin这样的其他语言用于JVM及其数据类