【面试】【1】HashMap的扩容机制

1、HashMap是一种数据存储的容器,当创建一个集合对象的时候,实际上就是在内存里面一次性的申请了一块内存空间,存储容量的大小是在创建集合的时候给指定的,HashMap的默认大小是16

2、当集合存储容量达到某个临界值的时候,就会动态扩容,临界值 = 扩容因子*容量大小,负载因子默认是0.75,也就是元素达到12的时候会触发扩容,扩容大小是原来的2倍;

3、HashMap本质上数组的结构,在扩容的时候需要新建一个更长的数组,然后将原来数组里面的数据copy到新数组就可以啦

 

为什么扩容因子是0.75?

1、扩容因子表示哈希表中值的填充程度

2、扩容因子越大,触发扩容的元素个数越多,虽然空间的整体利用率会比较高,但是hash冲突的概率也会比较高

3、扩容因子越小,触发扩容的元素个数越少,虽然hash冲突的概率降低,但是空间的整体利用率会降低,而且会增加扩容的频率

4、扩容因子是冲突的概率和空间利用率之间的平衡

5、HashMap采用链式寻址的方式来解决hash冲突,为避免链表过长带来时间复杂度增加的情况,所以链表长度大于等于7的时候,就会转为红黑树,从而提升检索的效率;当扩容因子为0.75的时候,链表长度达到8的可能性几乎为0

 

posted @ 2022-08-15 20:57  青玄0316  阅读(2769)  评论(0编辑  收藏  举报