HashMap中‘entry’定义疑问:是已填充桶数还是键的总数量?
HashMap中'entry'的定义澄清
HashMap里的'entry'指的是键值对的总数量,不是已填充的桶的数量。
结合你提到的The Odin Project课程例子:16个桶、负载因子0.8时,超过12.8个entry(第13个)触发扩容,这里的13个就是13个独立的键值对——不管它们哈希到同一个桶还是多个桶,只要键值对总数达到13,就需要扩容。
你之前的错误在于用filledBucketCount统计已填充桶的数量来判断扩容时机。比如12个键值对可能只占了少数几个桶(因为哈希冲突会让多个键值对落到同一个桶),此时添加第13个键值对,总数已经达到扩容阈值,但桶的填充数可能远没到13,所以没触发预期的扩容。
负载因子的核心作用是控制哈希冲突的程度:当键值对总数过多,桶里的链表会变长,查询、插入的效率会下降。所以扩容的判断依据必然是键值对的总数量,而非桶的填充数——毕竟哪怕所有键值对都挤在同一个桶里,只要总数超过阈值,就需要扩容来分散这些键值对。
内容的提问来源于stack exchange,提问作者user14810275
相关产品推荐
相关产品推荐

