Java:HashMap 大小是“质数”还是“2 的幂”?

2024-03-15

许多书籍和教程都说哈希表的大小必须是素数才能将键均匀分布在所有桶中。但是Java的HashMap始终使用 2 的幂的大小。难道不应该使用素数吗?作为哈希表大小,“质数”或“2 的幂”哪个更好?


使用 2 的幂可以有效地屏蔽哈希码的最高位。因此,质量差的哈希函数在这种情况下可能表现得特别糟糕。

Java's HashMap通过不信任对象的hashCode()实施和对其结果应用第二级散列 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java#256:

将补充哈希函数应用于给定的 hashCode,以防止质量较差的哈希函数。这一点很关键,因为 HashMap 使用二次方长度的哈希表,否则会遇到低位相同的 hashCode 的冲突。

如果你有一个好的哈希函数,或者做类似的事情HashMap确实如此,是否使用素数等作为表大小并不重要。

另一方面,如果哈希函数未知或质量较差,那么使用素数将是更安全的选择。然而,它会使动态大小的表实现起来更加困难,因为突然间您需要能够生成素数,而不是仅仅将大小乘以常数因子。

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

Java:HashMap 大小是“质数”还是“2 的幂”? 的相关文章

随机推荐

  • ggplot2中的上标和下标轴标签[重复]

    这个问题在这里已经有答案了 我需要 ggplot2 中的一个轴标签 其内容为 同化 mol CO2 m 2 s 1 其中 CO2 的 2 作为下标 2 和 1 作为上标 谢谢 你可以尝试 library ggplot2 qplot upta
  • C# Web API POST 参数 FromBody 始终为 null

    我已经在网络上搜索了几个小时 并尝试了 StackOverflow 上描述的许多不同的解决方案 我知道以前曾有人问过类似的问题 但没有一个答案或评论对我有用 问题 我有一个 NET Web API 它有一个带有一些参数的 Post 方法 其
  • Extjs - 带有子菜单的工具栏按钮菜单下拉列表。这是可能的?

    我已经完成了一个带有带有下拉菜单的按钮的工具栏 但我需要更多的子菜单级别 可以这样做吗 例子 工具栏按钮 gt 菜单 1 级 1 菜单 2 LV 1 menu 3 lv 1 gt 子菜单 1 lv 2 子菜单 2 lv 2 菜单 4 LV
  • 版本控制和测试驱动开发

    测试驱动开发的标准流程似乎是添加测试 查看它失败 编写生产代码 查看测试通过 重构 并将其全部检查到源代码管理中 是否有任何东西可以让您检查测试代码的修订版 x 和生产代码的修订版 x 1 并查看您在修订版 x 中编写的测试是否失败 我对任
  • 如何在 Visual Studio 2010 中的 AnkhSVN 中更改 SVN 身份验证详细信息?

    我想在 Visual Studio 2010 AnkhSVN 插件中更改 SVN 的用户名和密码 我怎样才能做到这一点 找到了 要清除缓存的用户名 密码 您可以访问 Tools gt Options gt Source Control gt
  • Bash 中声明、排版和局部变量之间的区别

    在 Bash 中输入变量时 有什么区别declare and typeset 当在函数内部使用时 有什么区别declare and typeset and local 我遇到的唯一区别是排版可以移植到 ksh 脚本 除此之外 还有什么理由可
  • 浮点图 - 外部选择条形图

    我正在使用浮点http code google com p flot http code google com p flot 并希望当用户将鼠标悬停在链接上时突出显示系列中的特定栏 有谁知道该怎么做 Cheers Tim 你正在寻找的是hi
  • 将视觉块发送到外部命令

    如何将视觉块发送到外部命令 我使用 Ctrl q 选择我的块 然后按 program name 但 Vim 发送整行而不是选定的文本块 我在 Windows 10 上使用 gVim Ex 命令是基于行的 而块视觉模式是一个 Vim 扩展 这
  • Kentico UserInfoProvider 在控制台应用程序中未按预期工作

    此代码在 Kentico 网站中运行良好 var users UserInfoProvider GetUsers for int x 0 x lt users Count x UserInfo currentUser users Eleme
  • Tailwind CSS,某些自定义颜色不起作用

    我正在尝试通过编写一些主题在我的项目中使用 Tailwind 自定义颜色tailwind config js extend module exports content src js jsx ts tsx public index html
  • 错误错误:未捕获(承诺):NullInjectorError:R3InjectorError

    我有一条错误消息 ERROR Error Uncaught in promise NullInjectorError R3InjectorError MarketModule IndiceService gt IndiceService g
  • 仅在一个WebLogic集群节点上运行@Scheduled任务?

    我们正在集群 WebLogic 10 3 4 环境中运行一个 Spring 3 0 x Web 应用程序 war 其中包含夜间 Scheduled 作业 但是 当应用程序部署到每个节点时 使用 AdminServer 的 Web 控制台中的
  • 超时后中止 Rust 中的评估

    我有一个 Rust 函数 不是我写的 它要么以毫秒为单位返回 要么在失败前等待约 10 分钟 我想将对这个函数的调用包装在返回一个Option这是None如果运行时间超过 10 秒 则包含结果 如果运行时间较短 然而 我还没有找到任何方法来
  • Kotlin 中的记忆功能

    我有一个带有实例方法 buildHierarchyUncached 的现有类 其签名可以在下面找到 private fun buildHierarchyUncached date LocalDate Node 我想向公众提供function
  • 语音回声问题

    我正在尝试使用 Adob e Flex 构建一个视频聊天程序 但回声存在一个巨大的问题 如果参与者没有使用耳机 他们所说的一切都会产生回声 更糟糕的是 它们实际上可以创建回声的正反馈循环 直到麦克风静音为止该循环不会结束 有没有人在 Fle
  • 根据 WooCommerce 结账中的分类术语限制支付网关

    在我的 WooCommerce 商店中 仅当产品具有类别 ID 266 的特定产品类别时 我想限制并显示支付网关 支票 现在我有了这个代码片段 但它的作用相反 它在结账时禁用了特定产品类别的网关 add filter woocommerce
  • JQuery UI 可拖动:超出一侧的限制

    我正在使用 JQuery UI 来实现可调整大小 可拖动的元素 现在我想为这些元素定义一个包含 限制在三个 边上的调整大小 拖动 例如 看看这个JSFiddle 示例 http jsfiddle net zuul e2yfC 5 您可以看到
  • 使用 alamofire 的多部分/表单数据

    我正在进行 post API 调用 并且需要使用 multipart form data 我知道如何使用 JSON 进行调用 但我不熟悉 multipart form data 使用 JSON 这是一个超级简单的调用 只需创建一个类型参数
  • 用于更新 JTable 中给定单元格/列并增加焦点的侦听器类型

    我正在尝试使用预定义第一列的 JTable 用户仅将数据输入到第二列 数量 然后 我通过将 服务 列和 数量 列相乘来计算最终收入 并将其显示在第三列 收入 中 Service Quantity Income 40 00 X 40 00 3
  • Java:HashMap 大小是“质数”还是“2 的幂”?

    许多书籍和教程都说哈希表的大小必须是素数才能将键均匀分布在所有桶中 但是Java的HashMap始终使用 2 的幂的大小 难道不应该使用素数吗 作为哈希表大小 质数 或 2 的幂 哪个更好 使用 2 的幂可以有效地屏蔽哈希码的最高位 因此