为什么 resize 是这样实现的?

2024-02-07

我有几个关于重建的问题HashMaps添加新的键值对时。我将根据这些事实提出问题(它们对于 Oracle JVM 来说是正确的,不确定它们对于其他 JVM 是否正确):

  1. 调整重建大小HashMap每次当您将 HashMap 增长到大于阈值(阈值 = loadFactor*numberOfEntries)时,都会有一个更大的内表数组。新创建的 Entry 放在哪个存储桶中并不重要 - Map 仍然会变大。即使所有条目都进入一个存储桶(即它们的密钥)hashCode()返回相同的数字)。
  2. HashMap删除数据时不会缩小。即使所有钥匙都被移除HashMap,它的表的内部大小不会改变。

现在的问题是:

  1. 这些事实正确吗?

如果是,那么:

  1. 为什么要以这种方式调整大小?即使明显没有必要,是否仍打算增加内表?还是一个错误?
  2. 为什么它不收缩?

是的,这些事实是正确的。

  1. 检测是否“显然没有必要”会花费大量时间,而且几乎总是多余的,因为所有键具有相同哈希码的情况很少见。简而言之,您正在支付一笔巨额费用(跟踪一个特定哈希码的常见程度)大家只是为了在极少数情况下节省一些工作,这最终会导致成本超过节省的成本。
  2. 因为删除是一个不太常见的操作,并且通常会随后重新填充地图。如果你想用一个较小的表重新开始地图,你可以将它分配给一个new HashMap并让旧的被垃圾收集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 resize 是这样实现的? 的相关文章

  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • 将 SVG 文件转换为多个不同大小的 PNG 文件

    我有一个 SVG 格式的徽标图像 我想知道是否有办法生成多个不同大小的 png 文件 例如 我设置了 20 个不同的宽度和高度 它会生成 20 个 PNG 文件 如果我必须一次处理 5 张图像也没关系 我已经安装了 illustrator
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo

随机推荐

  • SQL Server 中的列名不明确

    1 https i stack imgur com mQimv png CREATE VIEW planView SELECT planID planName cost quota maxSpeed shapedSpeed typeID t
  • 如何从给定日期获取一个月的最后一天?

    例如 给定日期是1924 年 4 月 4 日我想找出 1924 年二月的最后一天 我想出了 add month 但如果我有来自数据源的不同给定月份 它似乎不灵活 有什么好主意吗 甲骨文有一个last day http docs oracle
  • GCC 错误:命令“gcc-4.0”失败,退出状态为 1

    我正在尝试使用 Xcode 4 2 将 Fabric 安装到 Virtualenv Django 1 3 1 OS X Lion 中 这个错误似乎是相当普遍 https stackoverflow com questions 6906385
  • BigQuery:GHTorrent 何时刷新以及如何获取最新信息?

    The ghtorrent bq数据很高兴有 GitHub 的快照 但是 尚不清楚它何时更新以及我如何获取更多最新数据 理论上 每次发布新的 GHTorrent MySQL 转储时都会更新它 实际上 仍然需要对生成的 CSV 进行手动调整
  • C++ 视频流检测 FPS

    我尝试从轴或 eneo 相机获取视频流的正确 fps rtsp 192 168 0 1 554 axis media media amp I use cv VideoCapture get CV CAP PROP FPS https doc
  • 获取解决方案中使用的所有 NuGet 包的列表

    我正在寻找一种方法 使用命令行脚本而不是在 Visual Studio 中手动获取解决方案 特别是版本 中每个项目中所有使用的 NuGet 包的列表 使用包管理器控制台和命令 Get Package 给了我我想要的东西 但它在 VS 之外不
  • IAP 实际验证收据 (Swift)

    我一直在尝试在我的 spritekit 游戏中实现收据验证 我一直在关注各种教程 基本上最终得到了这段代码 enum RequestURL String case production https buy itunes apple com
  • 尝试让phonegap的Android LocalNotification插件在cordova-1.6.0中工作

    我正在尝试将使用适用于 Android 的 LocalNotification 插件的 Phonegap 1 4 1 项目升级到 cordova 1 6 0 我在这里找到了这个链接 https github com davejohnson
  • VisibleDeprecationWarning - 这是从哪里来的?

    我正在编写一些代码来用 python 模拟量子计算机 我刚刚添加了一个开始集成大于一个量子位功能的部分 然后出现了这个奇怪的错误 它没有说明是哪一行引起的 所以我什至不知道从哪里开始修复它 而且我以前从未见过它 此外 即使出现此错误 该程序
  • 无法通过 AWS EC2 实例上的 Gunicorn 访问 Django 默认应用程序

    我已经为这个问题苦苦挣扎了两天 但没有成功 我创建了一个名为 testdj 的默认 Django 1 6 1 应用程序实例 将其安装在运行 Ubuntu Server 13 10 的 Amazon AWS EC2 t1 micro 实例上
  • 如何在 IntelliJ IDEA 中使用 Lombok 生成的 setter 方法中设置断点?

    有办法进去吗智能IDEA设置一个断点在由以下方法生成的 setter 方法中Lombok 这在某些调试场景中非常有用 例如查看何时从 Hibernate 等框架调用 setter 事实上 生成的setter方法显示在IntelliJ IDE
  • 尽管有主键,MagicalRecord 关系映射仍会重复对象

    我需要一些帮助来解决我在 MagicalRecord 数据导入方面遇到的问题 我的印象是 MagicalRecord 能够通过查看主键来处理关系映射 而无需复制对象 relatedByAttribute 这是一个简单的 JSON paren
  • 哪个线程处理该信号?

    我有 2 个线程 线程 1 和线程 2 我有信号配置SIGINT 每当SIGINT发生线程2应该处理该信号 为此我写了下面的程序 include
  • 承诺的不可变性及其保证价值意味着什么?

    我试图理解es6 Promise 和常规回调之间的区别 http www datchley name es6 promises 但不要得到下面的例子 有人可以展示使用回调执行以下操作会是什么样子吗 an immediately resolv
  • 如何正确使用va_list,add,start,end?

    我正在努力创建自己的 printf 函数 我从完成主项目所需的较小功能开始 如果 i 0 我的函数应该返回参数的总和 或者如果 i 1 它应该返回作为参数传递的最后 nb 个字符串的大小总和 因此 如果我有 a out 0 2 3 3 它应
  • 使用快速步进器乘以我的原始数字而不是以前的数字

    这是我的代码 我的需要是价格标签上是否有编号 当按步进器添加时 我需要步进值来乘以我的价格数字 但我遇到这种情况 价格标签不会乘以我原来的数字 就像价格原本是 50 一样 我想显示 50 100 150 200 250 不是这样的 50 1
  • 在 Windows 中使用 SHARE 属性对文件进行内存映射(因此文件不会被锁定以防止删除)

    有没有什么方法可以将文件的内容映射到 Windows 中的内存中 而不会锁定文件 特别是 这样可以在仍进行 mmap 时删除文件 Java NIO 库在 Windows 中映射文件 这样当堆中留有任何非垃圾收集的 MappedByteBuf
  • 这是实体关系图还是类图

    嘿 基本上我对类图和 ERD 的区别感到困惑 我创建了一个我认为是 ERD 的东西 但我的室友似乎认为它是一个类图 它是什么 与已接受的答案相反 xmojmr 也注意到这是NOTUML 图 而是实体关系图 ERD 最明显的区别是连接器末端的
  • 基于参数化fixture的Pytest参数化

    我有一个类范围的参数化装置 它获取 3 个数据库的参数并返回每个数据库的连接 类中的测试使用此装置来测试每个数据库连接属性 现在我有一个带有数据库表测试的新类 我想使用上面的固定装置 但要在每个连接表上进行参数化 关于 pytest 实现这
  • 为什么 resize 是这样实现的?

    我有几个关于重建的问题HashMaps添加新的键值对时 我将根据这些事实提出问题 它们对于 Oracle JVM 来说是正确的 不确定它们对于其他 JVM 是否正确 调整重建大小HashMap每次当您将 HashMap 增长到大于阈值 阈值