Java中的HashMap了解么?HashMap的底层实现

  1. HashMap将数据以键值对的形式存储,是线程不安全的。
  2. HashMap的底层实现?
  • 数组+链表+红黑树
  • JDK8 引入了红黑树(Red-Black Tree),链表长度超过8时,会将链表转换为红黑树,来提高在链表长度较长时的查找性能。
  • 总结:java8 使用数组+链表 或红黑树(链表超过8会转为红黑树,小于6会变成链表)
  1. 为什么链表大小超过8会自动转为红黑树,小于6时重新变成链表
  • 根据泊松分布,当负载因子默认为0.75的时候,单个hash槽内元素个数为8的概率小于百万分 之一,所以将7作为一个分水岭, 等于7的时候不转换,大于等于8的时候才转换成红黑树,小于等于6的时候转化为链表。
  1. 为什么要引入红黑树,而不用其他树?
  • 在替换链表时,常用的数据结构是二叉树,但是二叉树一定是 左边< root根节点 < 右边。时间复杂度从O(n)变成了O(logn)
  • 极端情况下,会出现左右其中一边无限长。导致退化到链表。 基于此情况衍生出平衡二叉树,
posted @ 2025-05-15 19:26  kuki'  阅读(29)  评论(0)    收藏  举报