HashMap扩容机制
时间: 2023-06-26 10:01:51 浏览: 88
ArrayList及HashMap的扩容规则讲解
5星 · 资源好评率100%
当HashMap中的元素个数超过了负载因子(load factor)与当前容量的乘积时,就会触发扩容操作。扩容操作会新建一个容量是原来两倍的数组,并且将原数组中的所有元素重新分配到新数组中。具体步骤如下:
1. 新建一个容量是原来两倍的数组,将原数组的元素重新映射到新数组中。
2. 对于每个元素,HashMap会调用其hashCode()方法得到一个哈希值,然后将这个哈希值对新数组的容量取模得到一个新的下标,将元素存储到新数组的对应位置上。
3. 如果新数组的某个位置已经有了元素,就会发生冲突(collision)。HashMap使用链表或红黑树来解决冲突。如果该位置上的元素个数小于等于8个,HashMap会将新元素插入到链表中;如果大于8个,HashMap会将链表转换为红黑树,再进行插入操作。
4. 所有元素都重新映射到新数组中后,原数组中的所有元素会被清除,释放内存空间。
值得注意的是,扩容操作是非常耗时的,因为需要将所有元素重新映射到新数组中。因此,为了避免频繁扩容,我们在创建HashMap对象时应该预估好元素个数,并且设置合适的负载因子。一般来说,负载因子的取值范围在0.5到0.75之间比较合适。
阅读全文