【379、HashMap1.8 的底层结构以及扩容】

43 阅读1分钟

HashMap1.8 的底层结构是数组加链表/红黑树的混合结构,数组用来存储节点,链表/红黑树用来解决哈希冲突。

具体来说,HashMap1.8 内部维护了一个 Node 类型的数组 table,每个节点包含了 key、value、hash 值和指向下一个节点的指针。当添加元素时,会根据元素的 hash 值计算出应该存储在数组的哪个位置,并将元素插入到该位置对应的链表或红黑树中。当哈希冲突较多时,链表会转化为红黑树,以提高查找效率。

在 HashMap 内部,当 table 中元素的数量达到容量的 0.75 倍时,会触发扩容操作。具体来说,会创建一个新的容量为原容量的两倍的数组,将原数组中的元素重新散列到新数组中,然后将新数组赋值给 table 属性。在重新散列时,每个元素的 hash 值都会重新计算,并根据新的数组长度计算出应该存储在新数组的哪个位置。如果原数组中的元素在新数组中仍然 hash 到同一个位置,那么它们会按照插入的顺序形成一个链表或红黑树。扩容的过程比较耗时,但是可以避免哈希冲突过多而导致的性能下降。