gpt4 book ai didi

java - Java有Hashable、Hasher之类的东西吗?

转载 作者:行者123 更新时间:2023-12-01 16:43:31 25 4
gpt4 key购买 nike

对于Hash数据结构,如HashSet、HashMap等,我们需要实现hashcode。然而,这并不是很方便。我们可以使用 Hashable 或 Hasher 之类的东西来代替吗?

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

最佳答案

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

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

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

最后,更进一步,JVM 平台允许使用像 Lombok 这样的库。在编译阶段自动插入这样的方法覆盖。或者甚至为 JVM 使用其他语言,例如 kotlin 及其 data classes

关于java - Java有Hashable、Hasher之类的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57845313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com