当前位置: 首页 > 知识库问答 >
问题:

为什么调整大小是这样实现的?

易弘阔
2023-03-14

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

  1. 每次当HashMap增长大于阈值(阈值=加载因子*条目数)时,Resize将重建HashMap,使其具有更大的内部表数组。新创建的条目放在哪个存储桶中并不重要,Map仍然会变得更大。即使所有条目都进入一个bucket(即它们的键“hashCode()返回相同的数字)

现在问题是:

  1. 这些事实正确吗

如果是,则:

共有1个答案

施梓
2023-03-14

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

  1. 检测是否“显然没有必要”需要很多时间,而且几乎总是冗余的,因为所有密钥都具有相同哈希代码的情况很少见。简而言之,在极为罕见的情况下,为了节省一些工作,您为每个人都付出了巨大的代价(跟踪一个特定哈希代码的常见程度),这最终会导致成本高于节省
  2. 因为移除是一种不太常见的操作,通常在移除之后会重新填充贴图。如果您想用一个较小的表重新开始映射,您可以将其分配给一个新的HashMap,并让旧的HashMap被垃圾收集
 类似资料:
  • 问题内容: 在添加新的键值对时,我有几个关于重建的问题。我将基于以下事实提出问题(对于Oracle JVM来说是正确的,不确定它们是否对其他JVM正确): 每当您将HashMap增大到大于阈值(阈值= loadFactor * numberOfEntries)时,调整大小即可重新构建以具有更大的内部表数组。新创建的Entry放在哪个存储区中无关紧要-地图仍会变大。即使所有条目都进入一个存储桶(即,

  • 我查看了源代码中的一些内容,并注意到虽然(或其长的对应部分)是这样实现的: 这对我来说是完全有意义的,这和我想做的是一样的。但是,double/float的实现是这样的: 我完全傻眼了。是否将与其自身进行比较?第二张支票是为了什么?为什么它的实现方式不像int/long版本一样?

  • 我对具有“洞”的元组感兴趣。这些孔是空结构。所有孔都将具有相同的类型,在此处称为“空”。 为了说明起见,让 。正如我所料, 。然而, 我不明白为什么最后两种类型的大小不是2(在

  • 问题内容: 限制Java JVM上Permgen空间大小的目的是什么?为什么不总是将其设置为等于最大堆大小?Java为什么默认为这么少的64MB?他们是否正在试图通过这种方式迫使人们注意代码中的Permgen问题? 如果我的应用使用85MB的permgen,那么将其设置为96MB可能是安全的,但是如果它只是主堆的一部分,为什么还要设置得如此之小呢?允许JVM使用堆允许的PermGen效率不高吗?

  • 你好,谢谢你花时间处理我的问题。首先让我向你介绍我的虚拟/培训项目。下面列出的类应该代表MVC模型(模型、视图、控制器)之后的程序。运行主类时,会打开FileChooser,从中可以选择. csv-File,其中包含保存为String[][]的信息。这个String[][]然后在视图类中可视化为JTable。这个JTable是带有BorderLayout的JFrame中的JPanel的一部分。中心

  • 问题内容: 调整浏览器窗口大小时,有什么方法可以调整jqGrid的大小?我已经尝试过这里描述的方法,但是该技术在IE7中不起作用。 问题答案: 作为后续措施: 由于不可靠,本文中显示的先前代码最终被放弃了。我现在按照jqGrid文档的建议使用以下API函数调整网格大小: 为了进行实际的大小调整,将实现以下逻辑的函数绑定到窗口的resize事件: 使用其父级的clientWidth和(如果不可用)o