hashMap知识点

一、hashMap默认初始容量是多少?

 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//默认为16

        static final int MAXIMUM_CAPACITY = 1 << 30;//最大容量为2的30次幂

        static final float DEFAULT_LOAD_FACTOR = 0.75f;//默认加载因子为0.75

二、hashMap put的原理

   1、首先计算key的hash值()

   2、根据hash值计算数组下标

         数组下标=(n - 1) & hash

   n为数组长度。

  3、查询数组中是否存在该下标(tab[i = (n - 1) & hash]))

        1)如果不存在则进行newNode,把新new的node放在数组中

               2)如果存在,循环遍历此链表中此key是否存在源码为(k = e.key) == key || (key != null && key.equals(k))),

   如果存在此key那么更新该key的值,

                       如果不存在此key,那么newNode放到该数组下标下链表的最后一个节点

 4、put的时候,会判断table的容量是否足够,如果不够,会进行扩容。

             注意:如果当前table的容量已经最大了MAXIMUM_CAPACITY = 1 << 30;那么不再进行扩容,只是调账阀值为最大int  的最大值 2的31次幂减1。

            扩容的大小为原来table的两倍,阀值也是原来的两倍,

            扩容后,原数组中的数据,(e.hash & oldCap)与运输后是0的话索引没变,是1的话索引变成“原索引+oldCap”;

      

  

              

             


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值