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 的幂”? 的相关文章

  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • JSON 中的哈希到底是什么?

    我正在学习 JSON 但我发现你也可以将所谓的 哈希 放入 JSON 中 我在哪里可以找到什么是哈希 或者你能向我解释一下什么是哈希吗 另外 什么是哈希图 我有 C 和 C 经验 正在学习 JS Jquery 和 JSON 哈希是一个稀疏数
  • 使类只能从特定类实例化

    假设我有 3 节课class1 class2 and class3 我怎样才能拥有它class1只能通过实例化class2 class1 object new class1 但不是 class3 或任何其他类 我认为它应该与修饰符一起使用
  • 重写 getPreferredSize() 会破坏 LSP

    我总是在这个压倒一切的网站上看到建议getPreferredSize 而不是使用setPreferredSize 例如 如前面的线程所示 对于固定大小的组件 使用重写 getPreferredSize 而不是使用 setPreferredS
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 以有效的方式从 Map 中删除多个键?

    我有一个Map
  • 这个等待通知线程语义的真正目的是什么?

    我刚刚遇到一些代码 它使用等待通知构造通过其其他成员方法与类中定义的线程进行通信 有趣的是 获取锁后 同步范围内的所有线程都会在同一锁上进行定时等待 请参见下面的代码片段 随后 在非同步作用域中 线程执行其关键函数 即 做一些有用的事情1
  • JavaFX使节点覆盖父节点边框颜色

    我有一个如下所示的节点 仅使用 css 我希望标签覆盖其父边框颜色 因此标签下方的边框颜色部分变得不可见 我用来制作这个边框的CSS代码 fx border color black fx border width 3 fx border r
  • 在java中将字符串日期转换为美国格式

    我有下面的代码 其中日期为字符串类型 我必须将其设置为美国格式 所以下面我已经展示了它 private static final SimpleDateFormat usOutputDate new SimpleDateFormat MM d
  • 可访问数据的 Java 约定。 (公共访问器和 Getter/命名)

    通过 Java API 您会看到大量冲突的命名和实践 这让我感到非常困惑 例如 The String http grepcode com file repository grepcode com java root jdk openjdk
  • 具有 JPA 持久性的 Spring 状态机 - 存储库使用

    我试图弄清楚如何轻松使用 Spring 状态机 包括使用 JPA 进行持久化 这是我正在处理的问题 不兼容的数据类型 工厂和持久性 在程序的某个时刻 我想使用连接到用户的状态机 有用于此目的的存储库 项目spring statemachin
  • 嵌套字段的 Comparator.comparing(...)

    假设我有一个这样的域模型 class Lecture Course course getters class Course Teacher teacher int studentSize getters class Teacher int
  • 如何在不反编译的情况下更改已编译的.class文件?

    我想更改 class 文件方法 我安装 JD Eclipse Decompiler 并打开 class 文件 我添加了一些代码并保存 class 文件 但是 class 文件没有改变 我不知道如何使用反编译器 如果可能的话 如何在不使用反编
  • HTTP 状态 405 - 此 URL java servlet 不支持 HTTP 方法 POST [重复]

    这个问题在这里已经有答案了 我无法使页面正常工作 我有要发布的表单方法和我的 servlet 实现doPost 然而 它不断地向我表明我并不支持POST方法 我只是想做一个简单的网站并将值插入到我的 MySQL 数据库中 type Stat
  • 当底层连接是有状态时如何使用 Apache HttpClient?

    我在谷歌上搜索了很多关于如何使用 HttpClient 进行多线程处理的信息 他们中的大多数人建议使用 ThreadSafeClientConnManager 但我的应用程序必须登录某个主机 登录表单页面 以便 HttpClient 获得底
  • javax.media.jai 类的公共下载?

    这是一个非常简单的问题 我一直在寻找可以下载 javax media jai 库的地方 我找到了 jai imageio 库 但是我发现的所有其他 jai 内容要么已经过时 2008 年及之前 然后我遇到了登录屏幕 是否有 javax me
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整
  • 使用 PC/SC 读卡器验证 Ultralight EV1

    我在尝试使用 Java 中的 PC SC 读卡器 特别是 ACR1222L 验证 Ultralight EV1 卡时遇到问题 我能够使用 ISO 14443 3 标签的相应 APDU 在不受保护的标签上进行写入和读取 但是 我找不到运行 P
  • Errors/BindingResult 参数应在模型属性、@RequestBody 或 @RequestPart 参数之后立即声明

    我通过剖析示例应用程序来自学 Spring 然后到处添加代码来测试我在剖析过程中开发的理论 在测试添加到 Spring 应用程序中的一些代码时 我收到以下错误消息 An Errors BindingResult argument is ex
  • mybatis:使用带有 XML 配置的映射器接口作为全局参数

    我喜欢使用 XML 表示法来指定全局参数 例如连接字符串 我也喜欢 Mapper 注释 当我尝试将两者结合起来时 我得到这个例外 https stackoverflow com questions 4263832 type interfac

随机推荐

  • 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 的幂可以有效地屏蔽哈希码的最高位 因此