为什么hashmap要重新散列(在java中)?

问题描述 投票:0回答:1

java中的hashmap使用单独的链接来处理碰撞,这就是为什么你可以插入任意次数而不会出现任何问题。

我不明白的是:hashmap(在Java中)需要重新散列的原因

When the number of entries in the hash table exceeds the product of the load factor and the current capacity, the hash table is rehashed (that is, internal data structures are rebuilt)
使哈希表的桶数大约是两倍

哈希图会扩展,为什么?

这只是经典分离链接的优化,以限制每个存储桶可以拥有的键的数量(因为这些键具有相同的哈希值)?

java hashmap
1个回答
0
投票

当“桶”太满而影响查找时间、冲突和其他基于初始容量和负载因子的哈希图参数的因素时,需要对哈希图进行重新哈希,这些参数在HashMap的JavaDoc中进行了解释。

想象一下,您以列表的形式散列到

16
存储桶。那么索引将类似于 hashCode mod
16
。但是每个桶在链表中都可以有
1000's
的条目,因此仍然可以进行线性搜索来找到给定键的正确值。如果列表扩展到
256
个存储桶,那么索引现在将为 hashCode mod 256。但是现有元素位于新列表大小的错误存储桶中,因此所有内容都需要进行哈希处理。理想情况下,这种情况不会经常发生,并且可以根据数据的先验知识来设置初始大小和负载系数。

© www.soinside.com 2019 - 2024. All rights reserved.