HashMap 中插入null key 的过程

来源:互联网 发布:空间自动留言软件 编辑:程序博客网 时间:2024/05/22 04:37

添加key==null的Entry时,调用putForNullKey方法
正常的是put方法:
当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。
当两个不同的键对象的hashcode相同时它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。(比较key)
putForNullKey方法:
遍历table[0]的 Entry链表,寻找key==null的Entry
如果找到了覆盖原值,返回oldValue;没有找到就调用addEntry方法添加一个key—null的Entry
而addEntry是先判断是否需要扩容,Entry数大于等于临界值时扩为原来两倍,(每次扩容都是两倍),默认容量是16;
HashMap的负载因子默认为0.75,扩容临界值=HashMap最大容量(初始容量为16)*负载因子;
当容量达到2的31次方时,就不再扩容;
扩容resize扩容方法;
拷贝到新表方法 transfer方法;
不需要扩容就在table[0]进行头插;
总结:
1.先在table[0]的链表中寻找null key,如果有null key就直接覆盖原来的value,返回原来的value;
2.如果在table[0]中没有找到,就进行头插,但是要先判断是否要扩容,需要就扩容,然后进行头插,此时table[0]就是新插入的null key Entry了。

阅读全文
0 0
原创粉丝点击