【502、说说 HashMap 的底层原理?数据结构?扩容?】

51 阅读1分钟

Java8 中的 HashMap 底层原理是基于哈希表(hash table)实现的,使用数组+链表+红黑树的数据结构。

在 HashMap 中,存储键值对的数据结构称为“桶”(bucket),一个桶中存储多个键值对,如果桶中键值对的数量超过一个阈值(默认为 8),则会将这个桶中的键值对转化为红黑树进行存储,以提高查找的效率。

HashMap 的扩容机制是在桶中存储的元素数量大于当前容量(capacity)和负载因子(load factor)的乘积时触发。负载因子是一个在 0 到 1 之间的浮点数,表示桶中元素的占用比例,当桶中元素数量占比达到负载因子时就会触发扩容。

HashMap 的扩容机制会将当前数组容量扩大一倍,然后将原数组中的元素重新分配到新数组中,这个过程需要重新计算每个元素在新数组中的索引位置,因此扩容操作对于 HashMap 的性能有一定的影响。

Java8 在实现 HashMap 的时候,对于哈希冲突较多的情况,使用链表来存储冲突的元素,对于桶中的元素数量超过一定阈值后,会将链表转化为红黑树,以提高查找效率。同时,Java8 还优化了哈希函数的计算方法,减少了哈希冲突的发生,提高了 HashMap 的性能。