hashmap的结构是什么样的?那红黑树还能退化回去么?怎么扩容?负载因子,为啥翻两倍?

结构

JDK 8 中 HashMap 的数据结构是数组+链表+红黑树。

红黑树节点个数<6,转回链表

链表过长时,查询效率会比较低,于是当链表的长度超过 8 时(且数组的长度大于 64),链表就会转换为红黑树。

扩容2倍,负载因子

  • 如果键值对的数量(size)/ 数组的长度,大于负载因子(默认0.75),则需要进行扩容操作。
  • HashMap 的初始容量是 16,随着元素的不断添加,HashMap 就需要进行扩容,
  • 阈值是capacity * loadFactor,capacity 为容量,loadFactor 为负载因子,默认为 0.75。
  • 扩容后的数组大小是原来的 2 倍,然后把原来的元素重新计算哈希值,放到新的数组中。

源码分析,看其他文章

posted @ 2025-04-22 11:02  kuki'  阅读(11)  评论(0)    收藏  举报