**

    对于HashMap的底层数据结构在Java7Java8中的实现是不同的,在Java7中是采用数组+链表的数据结构进行实现,而在Java8中是采用数组+链表+红黑树的数据结构实现的。

    说时迟那时快,刚话说完,从兜里拿出笔和纸,啪地一声放在桌子上画了起来,许久之后,出现了两幅jdk7和jdk8的HashMap的内部结构图:

    你了解HashMap的底层数据结构吗? - 图1

    上图是jdk7内部结构图,以Entry<K,V>[]数组作为哈希桶,每个哈希桶的后面又可以连着一条单向链表,在链表中以k,v的形式存储数据,并且每一个节点有指向下一节点的指针

    你了解HashMap的底层数据结构吗? - 图2

    上图是jdk8HashMap的内部结构图,此时在源码源码中就不再使用Entry<K,V>[]作为数组,而是使用Node<K,V>[]数组作为哈希桶,每个哈希桶的后面也可能连着一条单向链表或者红黑树

    当单向链表的值>8的时候,链表就会转换为红黑树进行存储数据,具体详细的红黑树介绍之前已经写过一篇,这里就不再赘述,未详细了解的请移至这一篇[B树、B-树、B+树、B*树图文详解]。

    在面试大厂的时候,其实答到这里,还是不完整的,为什么呢?因为你想你说的上面的实际由jdk7jdk8转变的一个结果,但是重要的为什么要这样做?你还没有回答。

    如果你聪明点的话,就不会等着面试官抛出接下来的问题?而是自己去回答这个为什么?不是等着面试官继续抛出这个为什么?一个会聊天的人他会去猜测对方想知道什么?