HashMap是由什么数据结构组成? 答:在1.8之前,HashMap是由链表+数组组成,而在1.8之后HashMap增加了红黑树,也就是由链表+数组+红黑树组成。 HashMap为什么要添加红黑树这种数据结构在底层? 答:首先HashMap为了均匀的存储数据,就会使用到更好的HashCode算法去计算索引值,而再怎么好的HashCode算法也会造成有时候哈希冲突过多,链表存储的数据过多造成链表过长。而要知道链表的查询时间复杂度为O(n),过长时就会导致HashMap的查询性能降低,而HashMap的优势就体现不出来了。那么为了优化HashMap,即出现了红黑树,而红黑树的查询时间复杂度为O(logn),这样查询的效率就会大幅度提升。 那么变为红黑树的条件是什么呢? 答:HashMap需要数组长度大于64且链表长度大于8 那么如果出现以下情况:数组长度为32,但是链表大于8该怎么办? 答:出现以下情况,并不会将链表转为红黑树,因为不满足转成红黑树的条件,所以则会选择扩容resize();直到达到转树的条件才转成红黑树。 为什么会有这个转为树的条件? 答:HashMap的底层源码中定义了阈值为8,当大于8且定义了数组table的长度必须得为64。这是因为树所占用的内存是链表的2倍,所以虽然树的查询速度快,但是它所占的内存要多。在底层源码中,在随机哈希码下,树箱中的节点服从泊松分布,即树箱获得第一个元素的概率为0.6几,第二个