3

如果在放入 HashMap 期间发生冲突,是调整地图大小还是将条目添加到该特定存储桶中的列表中?

4

4 回答 4

13

当您说“碰撞”时,您的意思是相同的哈希码吗?hashcode 用于确定要使用 HashMap 中的哪个桶,桶由具有相同 hashcode 的所有条目的链表组成。然后在返回或引导(get/put)之前比较条目是否相等(使用 .equals())。

请注意,这是专门的 HashMap(因为这是您询问的那个),以及其他实现,YMMV。

于 2010-02-10T18:30:14.683 回答
2

任何一种都可能发生——这取决于 HashMap 的填充率。

然而,通常它会被添加到该存储桶的列表中 - HashMap 类的设计使得调整大小相对较少(因为它们更昂贵)。

于 2010-02-10T18:38:05.427 回答
1

的文档java.util.HashMap准确地解释了地图何时调整大小:

HashMap 的实例有两个影响其性能的参数:初始容量负载因子

容量是哈希表中的桶数,初始容量只是哈希表创建时的容量。

负载因子是哈希表在其容量自动增加之前允许达到的程度的度量。

当哈希表中的条目数超过负载因子和当前容量的乘积时,对哈希表进行重新哈希(即重建内部数据结构),使哈希表的桶数大约增加一倍。

默认初始容量为 16,默认负载因子为 0.75。您可以在地图的构造函数中提供其他值。

于 2010-02-11T09:12:34.553 回答
-1

当达到负载系数时,会进行调整。

当放入 HashMap 期间发生冲突时,该条目将添加到该特定“桶”中的列表中。如果达到负载因子,则调整 Hashmap 的大小。

于 2010-02-10T19:52:13.427 回答