为什么返回 (h = key.hashCode()) ^ (h >>> 16) 而不是 key.hashcode ?

2023-11-25

我不认为这种方法可以避免碰撞。我认为如果key.hashcode大于table.length,就会发生冲突。

更新: 其实我指的是HashMap#hash在 JDK 1.8 中,我对向下扩展高位的好处感到有点困惑。 现在,我想在这个的帮助下我很清楚了link,好处是:

  • 我们不需要进行%计算,而是使用更快速的方式——位移位。

对于冲突来说,如果key的数量大于表的长度,那么无论使用什么哈希方法都会发生冲突。


假设您天真地使用以下方法对哈希表进行索引

int index = hashcode % table.length;

在某些常见用例中,这可能会导致许多冲突。例如,假设 table.length 是 2 的小幂(如 32 或 64)。在这种情况下,只有哈希码的低位才能确定索引。如果对象的哈希码仅高位不同,这将导致大量冲突。位移位允许哈希码的高位也影响计算的索引。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么返回 (h = key.hashCode()) ^ (h >>> 16) 而不是 key.hashcode ? 的相关文章

随机推荐

  • Python mysql.connector InternalError:关闭游标时发现未读结果

    我想从光标读取部分结果 然后关闭它而不读取所有结果 cursor close raises InternalError Unread result found 是否可以关闭游标而不迭代所有结果或使用缓冲选项 Update 我的查询得到大约
  • Visual Studio Code 无法使用“code”命令打开

    当我尝试从命令行打开 VSCode 时code 我收到错误 MacOS Electron No such file or directory 我怎样才能解决这个问题 如果您遇到以下错误 usr local bin code line 6 u
  • 在同一个 UI 中使用 QVTKWidget 和 QOpenGLWidget?

    我正在开发一个使用自定义子类的项目QOpenGLWidget显示一些效果图 结束时paintGL 它调用小部件的方法update 方法触发重绘事件 如果它可见 现在我想添加一个额外的QVTKWidget到我的用户界面 我通过使用这样的东西来
  • 在条形图中设置轴标签和刻度线的不同位置

    我想重新对齐 偏移条形图的 x 轴和相关刻度线 这应该很简单 但我很难找到答案 下面是一些包含 24 个类别的示例数据 xval c 1 24 count c 0 03 0 03 0 08 0 06 0 11 0 4 0 3 0 5 0 5
  • 为什么 Safari 不接受 GZIP 压缩?

    我这里有一个相当大的 JavaScript 文件 我想将其嵌入到我的网站中 HTTP 服务器足够智能 可以在将文件传送到浏览器之前对其进行 GZIP 不过 我用 Google Chrome 和 Safari 进行了测试 在 Chrome 上
  • spring TransactionTemplate 和 SimpleJdbcTemplate 是线程安全的吗?

    我目前正在处理的代码中 有一个单例被许多线程使用 除了 TransactionTemplate 和 SimpleJdbcTemplate 的两个字段之外没有状态 这两个字段在单例的函数中用于访问数据库 这安全吗 还是我应该在需要时创建一个新
  • ./ 和 ~/ 之间的区别

    创建文件路径和 URL 时 我注意到很多时候路径以 or 以以下开头的文件路径有什么区别 and 它们各自的含义是什么 为了完整起见 Just path是一个名为的文件或目录path在当前目录中 path是一个名为的文件或目录path在当前
  • 如何更新 Rails 语言环境 YML 文件而不丢失注释和变量?

    我正在构建一个 Ruby 脚本来更改 config locales yml Rails 语言环境文件的内容 这些文件包含许多有用的注释和变量 通过加载 更新和转储它们 我丢失了这些注释和变量 如何以编程方式更新 YAML 文件 同时保留注释
  • 分支在 ?: 运算符?

    对于现代硬件上的典型现代编译器 运算符结果会产生影响指令管道的分支吗 换句话说 调用这两种情况以避免可能的分支 哪个更快 bool testVar someValue Used later purge white purge black 或
  • 如何隐藏 Html 日历面板中的年份部分?

    有没有办法隐藏年份部分 html 日历面板 只显示日历上的月份和日期部分 不幸的是 没有简单的答案 但是您可以使用替代方法 通过使用 JavaScript 强制用户仅输入月份和日期 var year new Date getFullYear
  • 按 ID 删除数百万行的最佳方法

    我需要从 PG 数据库中删除大约 200 万行 我有一个需要删除的 ID 列表 然而 我尝试做到这一点的任何方法都需要几天的时间 我尝试将它们放入表中并以 100 为一批进行操作 4 天后 该操作仍在运行 仅删除了 2972 68 行 我必
  • 带有数字和默认键盘的 UITextField

    为 邮政编码 邮政编码 字段创建了一个 UITextField 其键盘类型为 UIKeyboardTypeDefault 我想使用默认键盘 但希望默认显示数字和符号与字母相对应 当您在 Contacts app 中输入地址时 Apple 会
  • 使用 crontab 运行脚本时无法导入 Python MySQL 模块

    我正在使用 crontab 运行需要 MySQLdb 模块的 python 脚本 当我从命令行运行此脚本时 一切正常 但是 尝试使用 crontab 运行它会引发此错误 Traceback most recent call last Fil
  • Apple 的文本渲染如何绘制字体没有的字形?

    我对字体和编码有了基本的了解 但最近我不得不在我的舒适区之外做一些事情 转动字符 0x2716 重乘 x 变为CGPathRef 我使用了核心文本CTFontGetGlyphsForCharacters来完成这项工作 我明白 一个CGGly
  • 无法将不可变值作为 inout 参数传递:文字不可变,为什么?

    我想做一个函数来交换两个变量 但对于新的 swift 我不能使用 var import UIKit func swapF inout a Int inout with b Int print x a and y b a b b a prin
  • 如何在 Symfony 2 中通过伪造登录来测试 ACL 进行开发

    我正在开发基于 Symfony 2 的 Web 应用程序的一部分 与许多应用程序一样 需要身份验证和授权 我如何继续开发 通过传递或伪造登录来考虑 ACL 在文档中 login check身份验证和会话部分是否透明 我想我可能需要实现一个版
  • 用于调整窗口大小的自定义挂钩

    我正在创建一个自定义挂钩来捕获浏览器窗口大小 以便让我知道它是否是移动的 目前 我的问题是 React 告诉我它无法在 useEffect 挂钩中保留 screenSize 的变量值 我该如何解决这个问题 export default fu
  • 如何在 python 中进行 alpha 抠图

    如何在 python 中进行 alpha 抠图 更具体地说 如何提取图像的 alpha 通道 给定一个将像素标记为 100 前景 白色 100 背景 黑色 或未知 灰色 输入图像 输入三元图 使用库进行 alpha 抠图 这里有两个选项 都
  • WindowsFormsHost 是否适合用途(.net WPF 托管 WinForms)?

    GUI 驱动的应用程序需要托管一些基于 WinForms 的预构建组件 这些组件使用 GDI 和 DirectX 的组合提供高性能交互式视图 视图处理控制输入并显示自定义图形渲染 供应商在 WinForms 线束中对组件进行测试 商业应用程
  • 为什么返回 (h = key.hashCode()) ^ (h >>> 16) 而不是 key.hashcode ?

    我不认为这种方法可以避免碰撞 我认为如果key hashcode大于table length 就会发生冲突 更新 其实我指的是HashMap hash在 JDK 1 8 中 我对向下扩展高位的好处感到有点困惑 现在 我想在这个的帮助下我很清