【问题标题】:How to retrieve values after a hash collision如何在哈希冲突后检索值
【发布时间】:2020-04-01 02:36:07
【问题描述】:

我在很多地方读到,在 Java 中的哈希冲突之后,它在内部使用链表/树,基于哈希冲突的数量。直到这很好,

但是如何使用'key'取回期望值

【问题讨论】:

  • 假设你在谈论一个 HashMap,使用它的get() 方法。

标签: java hashmap new-operator data-retrieval hash-collision


【解决方案1】:

它只是迭代存储在该存储桶中的链表并使用没有冲突的equals 检查元素。

其运行时间是线性的,但仅与存储在该特定存储桶中的项目数量呈线性关系,因此只要存储桶保持足够平衡就可以。

看看这个插图 (source):

因此实现将确保 get 操作,即使它有冲突,最终返回正确的结果。


请注意,Java 的 HashSet 和 HashMap 不是如图所示的纯哈希表。在达到一定阈值后,他们将在内部切换到red-black tree。

【讨论】:

  • 但我们在检索时只有“key”。因此,据我所知,如何检查 equals 方法。我可能错了
  • @JijoFrancis keyFromUser.equals(keyInMap) 如果是true,它将假定它是正确的密钥。地图/集在内部完成所有这些工作。如果你调用map.get(key),你会得到正确的值。
  • @JijoFrancis 冲突不是两个键相等。冲突是两个不相等的键,但有一个 hashCode 导致它们放在同一个桶中。在这种情况下,当获取其中一个键的值时,映射会检查第一个键是否等于用户传递的那个,然后是第二个,直到找到相等的键。
猜你喜欢
  • 1970-01-01
  • 2014-05-10
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2015-04-07
  • 2013-01-10
  • 2016-07-30
相关资源
最近更新 更多