JDK 8 HashMap为啥要引入红黑树?
当HashMap 的 key 冲突过多时,比如我们使用了不好的 hash 算法,导致 key冲突率极高,我们都知道链表的查找性能很差,所以引入红黑树是为了优化查询性能。
JDK 8 HashMap为啥不直接用红黑树?
因为树节点所占用的空间是普通节点的两倍,所以只有当节点足够多的时候,才会使用树节点。也就是说,最开始使用链表的时候,链表是比较短的,空间占用也是比较少的,查询性能都差不多,但是当链表越来越长,链表查询越来越慢,为了保证查询效率,这时候才会舍弃链表而使用红黑树,以空间换时间。
所以没有必要一开始就用红黑树,另外,链表较长的情况非常少见,一开始就使用红黑树反而会导致所有的情况都会占用比链表大2倍的空间,适得其反,这也是一种平衡的策略。