1.hashMap的默认长度为16.
Put操作
首先计算key的hash值,key为空时hash为0,
如果是第一个值则创建一个Node的数组对象,数组的长度为16
因为数组的长度为16,所以数组下标的取值为(0~15),0=< (hash值除以15取余)<=15
那么第一个Node对象下标就是 key的hash值除以15取余。
2。装载因子的默认值为0.75
装载因子的作用:
扩大(hash值除以15取余)选择的范围,降低下标相同的几率。
试想一下,长度为16的数组,只装12个数。这12个数的下标是从(0~15)中随机生成。长度为1000的数组,只装12个数,这12个数的下标是从(0~999)中随机生成。
这12下标有相等的数的概率是不同的。前者的装载因子为0.75,后者的装载因子为0.012.
所以装载因子越小下标相同的概率就越小。有上述可推测装载因子肯定是小于等于1,大于零的。
3。hash值不同,但是坐标相同。举个栗子
Hash分别为50000,80000 数组长度为16,由此可以得出50000和80000除以16的余数为都为0,即下标都为了0.由于hash值不同我们可以知道这2个key肯定是不同的。这就需要介绍数组存储的node对象。Node对象可以包含另一一个Node对象。即2个坐标相同的对象可以理解为第一个node对象包含了第二个node对象,如果来了第三个坐标为零的对象,则第二个node对象包含了但三个node对象。数组坐标只要储存了第一个node对象就能依次得到所有的node对象。如图(1)数组包含了最外层的node对象。Node对象有如下属性key、value 、hash 、node,通过比较hash值来获取对应得node对象。
以上是对hashmap的初步理解。不对的地方请多多指教。
相关文章: