Luminous.X in the house  
Enjoy my whole life!
  1. 基本参数:

    • 初始容量:HashMap在创建时会指定一个初始容量,它表示哈希表初始的桶数。一般情况下,默认的初始容量为16。

    • 负载因子:HashMap在创建时也会指定一个负载因子,它表示哈希表在容量自动增加之前可以达到的填充程度。一般情况下,默认的负载因子为0.75。当哈希表中的元素数量超过初始容量乘以负载因子时,就会触发扩容操作。

  2. 扩容操作:

    • 创建新的哈希表:当HashMap需要扩容时,它会创建一个新的更大容量的哈希表。新的容量为原容量的两倍,即当前容量乘以2。

    • 迁移元素:接下来,HashMap会遍历原哈希表中的每个桶,将每个桶中的元素重新计算哈希值,并放入新的桶中。这个过程涉及到重新计算元素的哈希值、重新分配存储位置和调整其他相关的数据结构。这个过程被称为rehashing或者迁移。

  3. 容量的选择:

    • HashMap的容量始终是2的幂次方,这是为了在计算元素的存储位置时,使用位运算来代替取模运算,从而提高计算的效率。例如,当容量为16时,桶的索引可以通过对元素的哈希值进行位运算(hash & (capacity - 1))来计算。

    • 在扩容时,新的容量会是原容量的两倍,这是为了保持容量的幂次方属性。这样可以确保在扩容后,元素的存储位置仍然符合原有的位运算规则。

  4. 扩容带来的性能提升:

    • 扩容操作虽然需要重新计算元素的哈希值和重新分配存储位置,但它也带来了一些性能提升的好处。

    • 通过自动扩容,HashMap可以保持较低的负载因子,从而减少哈希冲突的概率。这样可以提高查询、插入和删除操作的性能。

    • 扩容操作还可以减少哈希表的填充程度,提高哈希表的空间利用率。

总结:HashMap的自动扩容机制通过创建新的更大容量的哈希表,并重新分配元素的存储位置来实现。扩容操作基于初始容量和负载因子进行触发,带来了性能提升和空间利用率的优化。

posted on 2023-07-06 17:36  Luminous_X  阅读(145)  评论(0)    收藏  举报