如果在放入 HashMap 期间发生冲突,是调整地图大小还是将条目添加到该特定存储桶中的列表中?
问问题
6848 次
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 回答