|
|
|
@ -16,7 +16,7 @@ comments: true
|
|
|
|
|
|
|
|
|
|
「负载因子 Load Factor」定义为 **哈希表中元素数量除以桶槽数量(即数组大小)**,代表哈希冲突的严重程度。
|
|
|
|
|
|
|
|
|
|
**负载因子常用作哈希表扩容的触发条件**。比如在 Java 中,当负载因子 $> 0.75$ 时则触发扩容,将 HashMap 大小扩充至原先 $2$ 倍。
|
|
|
|
|
**负载因子常用作哈希表扩容的触发条件**。比如在 Java 中,当负载因子 $> 0.75$ 时则触发扩容,将 HashMap 大小扩充至原先的 $2$ 倍。
|
|
|
|
|
|
|
|
|
|
与数组扩容类似,**哈希表扩容操作的开销很大**,因为需要将所有键值对从原哈希表依次移动至新哈希表。
|
|
|
|
|
|
|
|
|
@ -76,8 +76,6 @@ comments: true
|
|
|
|
|
|
|
|
|
|
!!! note "工业界方案"
|
|
|
|
|
|
|
|
|
|
Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度 $> 64$ 时,长度大于 8 的链表会被转化为「红黑树」,以提升查找性能。
|
|
|
|
|
Python 采用「开放寻址」。字典 dict 采用的是随机探测,即使用伪随机数来探测。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度大于 64 时,长度大于 8 的链表会被转化为「红黑树」,以提升查找性能。
|
|
|
|
|
|
|
|
|
|
Python 采用「开放寻址」。字典 dict 使用伪随机数进行探测。
|
|
|
|
|