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

浙公网安备 33010602011771号