添加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了。