繁体   English   中英

在散列映射中可以进行多次重新散列

[英]How many times can rehashing occur in a hashmap

最近,我参加了面试,面试官问我这个问题。

一次HashMap中可以进行多次重组? 两次? 或N次? [每次添加(阈值+1)元素时]

我知道当地图已满时,我们可能会做错事。

我承认我无法给出满意的答复。 谁能告诉我回答这些问题的方法。

或者,面试官究竟在寻找一个令人信服的答案?

以下是我在提出这个问题之前提到的一些问题。

https://stackoverflow.com/a/28811708 “当地图中的元素数量达到阈值时,完成哈希映射的重新散列”HashMap的加载因子为0.75,默认初始容量值为16。元素的数量达到或交叉12元素容量的重新映射发生。

在Hashmap中重新散列

当哈希映射中的条目数超过加载因子和当前容量的乘积时,哈希映射将被重新哈希(内部数据结构被重建),因此哈希映射具有大约两倍的桶数。 当您重新散列并将所有内容移动到新位置(存储桶等)时,旧元素也会再次重新散列,并根据新的哈希码存储在新存储桶中。 分配用于存储元素的旧空间被垃圾收集。

https://stackoverflow.com/a/27384645/5086633

这取决于地图的种类。

例如,对于HashMap,存在一个方法resize,定义如下:

将此映射的内容重新放入具有更大容量的新数组中。 当此映射中的键数达到其阈值时,将自动调用此方法。 如果当前容量为MAXIMUM_CAPACITY,则此方法不会调整映射大小,但会将阈值设置为Integer.MAX_VALUE。 这具有防止将来呼叫的效果。 参数: newCapacity新容量, 必须是2的幂; 除非当前容量为MAXIMUM_CAPACITY(在这种情况下值不相关),否则必须大于当前容量

因此,根据这个定义,可以将功率为2的步长放大到MAXIMUM_CAPACITY

MAXIMUM_CAPACITY的值是

static final int MAXIMUM_CAPACITY = 1 << 30;

该值为1.073.741.824。

构建一个新的HashMap表示初始容量为1,最多可以调整30个大小,因为2^30 = MAXIMUM_CAPACITY = 1.073.741.824

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM