当前位置: 首页 > 面试题库 >

究竟是哈希冲突

舒赞
2023-03-14
问题内容

HashMap中的Hash Collision或Hashing Collision并不是一个新话题,我遇到了多个博客和讨论区,解释了如何产生Hash
Collision或如何以模棱两可和详细的方式避免它。我最近在一次采访中遇到了这个问题。我有很多事情要解释,但我认为准确地给出正确的解释真的很困难。抱歉,如果我在这里重复我的问题,请给我准确的答案:

  1. 哈希冲突到底是什么?它是一项功能或常见现象,但误操作但可以避免吗?
  2. 究竟是什么导致Hash Collision(哈希冲突)的原因-自定义类hashCode()方法的错误定义,或者使equals()方法不被覆盖而hashCode()又不完美地覆盖了方法,或者不是由开发人员决定的,并且许多流行的Java库中都有可能导致哈希的类碰撞?
  3. 哈希冲突发生时,有什么地方出错或意外吗?我的意思是说有什么原因可以避免哈希冲突?
  4. Java是否在对象初始化期间为每个类生成或至少尝试生成唯一的hashCode?如果不是,仅依靠Java来确保我的程序不会在JRE类的Hash Collision中运行是否正确?如果不合适,那么如何避免将最终类(例如String)作为键的hashmap的哈希冲突?

如果您可以将一个或所有这些问题的答案分享给我,我将不胜感激。


问题答案:

哈希冲突到底是什么?它是一项功能或常见现象,但误操作但可以避免吗?

这是一个功能。它是由hashCode的本质引起的:从较大的值空间到较小的值空间的映射。根据设计和意图,将会发生冲突。

到底是什么导致哈希冲突-自定义类的hashCode()方法的错误定义,

不良的设计会使情况变得更糟,但这在概念上是地方性的。

或保留不覆盖equals()方法,同时不完美地覆盖hashCode()方法的情况,

没有。

还是不是由开发人员来决定的,许多流行的Java库中都有可能导致哈希冲突的类?

这真的没有道理。哈希表早晚会冲突的,糟糕的算法会使其早日崩溃。就是这样

哈希冲突发生时,有什么地方出错或意外吗?

如果哈希表被正确写入,则不是。哈希冲突仅表示hashCode不是唯一的,这使您进入调用equals(),并且重复次数越多,性能就越差。

我的意思是说有什么原因可以避免哈希冲突?

您必须权衡易于计算和价值分散的问题。没有单一的黑白答案。

Java是否在对象初始化期间为每个类生成或至少尝试生成唯一的hasCode?

不能。“唯一哈希码”在术语上是矛盾的。

如果不是,仅依靠Java来确保我的程序不会在JRE类的Hash
Collision中运行是否正确?如果不合适,那么如何避免将最终类(例如String)作为键的hashmap的哈希冲突?

这个问题毫无意义。如果您使用的String是散列算法,那么您别无选择,您还使用的是其hashCode已被专家奴役二十多年的类。



 类似资料:
  • 我正在使用git跟踪对LaTeX文档的更改。我倾向于将合著者的反馈保存在一个单独的分支中,并在以后将其合并。到目前为止,事情似乎神奇地正确地合并了,但我想知道合并冲突何时发生,这样我就可以在合并过程中获得一些真正的信任(当然我不希望文本出现问题)。 关于StackOverflow,有许多问题似乎问了同样的问题,但没有一个答案是非常具体的。例如,这个答案指定如果对同一个区域进行更改,就会发生冲突,但

  • 问题内容: 设置或设置为弹性项目而不是设置之间有区别吗? 是属性的“转折点” 吗? 当我设置浏览器时,如何确定将项目下移到新行的哪一点?是根据他们的宽度还是“弹性基础”? 示例:最后两个框具有相同的功能,但是当窗口在300px至400px之间时, 只有 其中一个向下移动。为什么? 问题答案: 允许您在计算其他任何内容之前指定元素的初始/开始大小。它可以是百分比或绝对值。 但是,它 不是 弯曲增长/

  • 问题内容: 我在jquery图像滑块演示中找到了reset.css文件,但它从未包含在主index.html文件中。应该做什么,更重要的是,您将它放在哪里?你把它之前 任何引用的样式表()? 这是reset.css内部的代码 问题答案: 最初,关于样式的工作方式还没有标准化,每个浏览器都实现了自己认为正确的方式。您在IE中看到太多有关样式错误的问题的原因之一是,因为IE是样式方面与其他浏览器最不相

  • 内部构造函数的准确定义是什么?在Julia-V0.6+中,“任何可以使用签名(注意部分)调用的构造函数都是内部构造函数”是正确的吗? 正如下面的注释中所讨论的,仅限于外部的构造函数实际上是吗? 使用检查方法是否是内部/外部构造函数是否正确? Julia自动定义的默认构造函数与用户显式定义的相应构造函数有什么不同? 顺便说一句,我知道如何使用以及何时使用内部构造函数。我知道什么是内部构造函数,直到只

  • 从原理到应用分析什么是哈希? 一、什么是哈希? 哈希(hash):将任意长度的输入(关键字),通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值,通常哈希值代表了关键字的存储位置。 但是为什么要这样做呢?或者说,哈希是怎样来的呢? 哈希的出现解决了两个问题:存储和搜索。 1. 存储(数据结构):如果在容器中保存对象及其关联的键,并且不用键

  • 我正在使用这个散列函数,但是我会遇到很多冲突。目的是添加元素的ascii值并输出该值。有什么方法可以优化这个或另一个功能来减少碰撞的次数?