HashMap的底层原理

 

 

HashMap的底层原理:

JKD8.0中:

HashMap的底层储存结构是数组+链表+红黑树。

当实例化一个 HashMap时,创建一个Node(在JDK7.0是entry,JDK8.0是Node,Node是entry的子类)数组(但是没有创建数组的大小,当进行put操作时才会生成数组的长度),会初始化initialCapacity(初始的数组长度,默认大小为16)和loadFactor(装载因子,默认大小为0.75),在put第一对映射关系 时,系统会创建一个长度为initialCapacity的Node数组,这个长度在哈希表 中被称为容量(Capacity),在这个数组中可以存放元素的位置我们称之为 “桶”(bucket),每个bucket都有自己的索引,系统可以根据索引快速的查 找bucket中的元素。

HashMap进行扩容和树形化的时间:

数组扩容:

当HashMap中的Node个数个数超过threshold(threshold临界点,是initialCapacity(初始长度)*loadFactor(装载因子)。大小为12)时,进行扩容,Node数组扩大到原来的两倍。

HashMap树形化:

链表长度>=8 && 数组大小>=64,如果不满足以上条件进行数组扩容。

当HashMap中的其中一个链的对象个数如果达到了8个,此时如果capacity没有 达到64,那么HashMap会先扩容解决,如果已经达到了64,那么这个链会变成 树,结点类型由Node变成TreeNode类型。当然,如果当映射关系被移除后, 下次resize方法时判断树的结点个数低于6个,也会把树再转为链表。

 图片版:

 

 

posted @ 2021-11-02 16:16  _图南  阅读(1653)  评论(0编辑  收藏  举报