【问题标题】:I'm using .hashCode() to create hashes. Is there a library to perform double hashing in Java to resolve collisions?我正在使用 .hashCode() 创建哈希。是否有在 Java 中执行双重哈希以解决冲突的库?
【发布时间】:2020-01-26 03:47:30
【问题描述】:

作为一个家庭作业问题,我正在尝试使用数组创建哈希图的实现。我正在使用 .hashCode() 创建哈希,我需要找到解决冲突的方法。

我曾想过使用双重哈希,但我找不到在 Java 中这样做的方法。我也尝试过搜索 SO,但大多数问题都在讨论如何处理冲突解决等,而不是如何实施解决方案。如果没有执行双重哈希的库,任何人都可以向我指出任何简单的替代方案吗?

【问题讨论】:

  • 听起来像XY problem。您没有提供足够的信息来帮助理解为什么会有很多冲突:也许数组的大小太小了?也许您使用的负载因子太小?也许您的对象以不好的方式覆盖了 hashCode?等等……
  • 这并不是说我有很多碰撞,部分任务是创建一种在发生碰撞时处理碰撞的方法。我使用的数组是输入数组大小的 1.3 倍。
  • 如果 HashMap 的键实现 Comparable,则 JDK 使用二叉树。

标签: java hashmap collision hashcode hash-collision


【解决方案1】:

双重散列可能是您希望在生产代码中执行的操作,但对于课堂练习来说,这可能有点过头了。

您应该做的是实现一个附加到哈希映射的每个bucket 的链表,并且当您发生“冲突”时(意思是,多个对象映射到数组中的同一个键)您只需使用新对象将另一个链接添加到列表中。一个很好的插图可以找到here

可以在此处找到一个很好的解释以及演示此解决方案的可视化图表: https://www.geeksforgeeks.org/internal-working-of-hashmap-java/

您可能还会发现以下相关 SO 问题 + 答案: What exactly is bucket in hashmap?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    相关资源
    最近更新 更多