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

为什么在对许多GetHashCode实现进行异或运算之前要乘以质数?

越学博
2023-03-14
问题内容

我了解在异或运算之前将大量的乘法运算应该有助于处理分布较差的操作数,但是为什么乘法器应该是质数?


问题答案:

Computing Life博客上有一篇很好的文章,详细讨论了此主题。它最初是作为对我在问题中链接到的Java
hashCode()问题的答复而发布的。根据这篇文章:

质数是唯一数字。它们的独特之处在于,由于使用了素数来构成素数,因此素数与任何其他数字的乘积具有唯一性的最大可能性(不像素数本身那样唯一)。此属性在哈希函数中使用。

给定字符串“ Samuel”,您可以通过将每个组成数字或字母乘以质数并将它们相加来生成唯一的哈希。这就是使用素数的原因。

但是,使用素数是一种古老的技术。这里的密钥是要理解的,只要您可以生成足够唯一的密钥,就可以使用其他哈希技术。在这里可以找到有关无素散列的更多信息。



 类似资料:
  • 问题内容: 我正在将某些东西从Java移植到C#。在Java中,a 取决于其中的项目。在C#中,我总是从… 获取相同的哈希码。 为什么是这样? 对于我的某些对象,哈希码必须有所不同,因为其list属性中的对象使对象不相等。我希望哈希码对于对象的状态始终是唯一的,并且仅在对象相等时才等于另一个哈希码。我错了吗? 问题答案: 为了正常工作,散列码必须是不可变-一个对象的散列码必须 永远不会 改变。 如

  • 问题内容: 我正在看这个Railscast插曲,想知道为什么需要在这里致电: 有什么用? 根据Rails的文档: escape_javascript(javascript) 转义符返回以及JavaScript段的单引号和双引号。 但这对我来说意义不大。 问题答案: 如果将代码分为两部分,则更容易理解。 第一部分;是带有erb的javascript。这意味着,它将被内部返回的任何红宝石代码替换。替换

  • 问题内容: 我指的是此处提出的问题,并使用作者代码示例,现在我的问题是 作者为什么要使用,真的有必要吗,因为syncedMap始终会确保没有两个线程试图对其进行操作,那么为什么需要在该地图本身上进行操作呢? 非常感谢您的解释。 问题答案: 为什么我们需要对其本身进行同步? 您可能需要在一个已经同步的集合上进行同步,因为您正在对该集合执行两个操作-在您的示例中,是a 然后是a。您试图在 _调用_集合

  • 本文向大家介绍你为什么想要做运营?你认为做运营需要具备哪些特质或素质?相关面试题,主要包含被问及你为什么想要做运营?你认为做运营需要具备哪些特质或素质?时的应答技巧和注意事项,需要的朋友参考一下 当时在产品与运营之间踌躇,产品从06年开始崛起,恰好是互联网发展的高峰时期,而那时的产品还有很多可以被挖掘的脑洞,但是时至今日,互联网进入了下半场,产品的同质化越来越严重,而这十几年来累积的各种产品人在某

  • 问题内容: 一些用户建议使用numpy的以下方法,以及我认为是正确的方法: 我也发现具有相同的性能。无论如何,另一个答案建议使用列表理解的解决方案: 但是在基准测试之后,我发现列表理解比numpy快得多: 结果: 如您所见,numpy大约快5倍。但最令人惊讶的是,它无需使用转置就可以更快地运行,并且适用于以下代码: 列表理解仍然快了5倍。因此,除了这一点之外,这里的列表理解是在C语言中执行的,我们

  • 问题内容: 在许多Java源代码中(例如),我看到了类似的东西; 我了解基本模式(锁定,最终解锁),但是我的问题是, 为什么在使用它之前先对本地作用域的Lock变量进行赋值? 为什么这样做而不是以下内容? 它会影响优化吗?第一个示例可以防止锁变粗吗? 评论后编辑 :如果您真的不知道为什么会出现这种情况,请不要添加答案。这是从Java来源获得的,@author标记是Doug Lea,所以我很确定它的