Java中HashMap底层为什么是数组链表?

之前面试时问了HashMap的底层结构,详细见本人个人对HashMap和Hashtable底层实现的见解,入口如下:
Java中HashMap与HashTable底层的联系与区别

之后被问到HashMap底层为什么是数组链表呢?这样的话,链表一长,在链表中查询的效率不是很低吗?
我:(哑了)
最近看到一个比较有依据的答案,在此做一下答复。
 


HashMap底层为什么是数组链表呢?在链表中查询的效率不是很低吗?


在JDK1.7以及1.7版本之前,HashMap对数组元素即链表的查询确实是从头节点开始查询的,这样链表一旦长了,效率比较低也是意料之中。
而在1.8中对HashMap的数据结构进行了一定的优化,其中增加了一个阈值对数组元素进行判断是否有必要进行红黑树变形(红黑树是一种二叉查找树),一旦链表长度达到了阈值,其数据结构便会变形为红黑树,提高了查询效率,但插入的效率并没有链表头插法那么高,这也可能是HashMap底层为什么不用红黑树组成的数组的原因之一。

 

 

你可能感兴趣的:(java)