jdk7和jdk8中HashMap的底层数据结构

jdk7和jdk8中HashMap的底层数据结构

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

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

jdk7和jdk8中HashMap的底层数据结构

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

jdk7和jdk8中HashMap的底层数据结构

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

当单向链表的值>8的时候,链表就会转换为红黑树进行存储数据,改进后无疑大大优化了大量数据下数据查询的性能。