一、前提须知
Node数组,即哈希表。当第一次调用put()方法时初始化哈希表
哈希表初始化时的默认容量,为16
默认加载因子为0.75,即哈希表中存在元素的位置个数>0.75*哈希表长度时,扩容哈希表
树化阈值,当哈希表某位置上的链表长度>=8且哈希表长度>=64时,这个链表会被树化为红黑树
退树化阈值,当哈希表某位置上的红黑树节点数<=6时,这个红黑树会退化为链表
最小树化容量,即只有当哈希表长度>=64时,才有可能会树化。如果哈希表长度<64且某位置上的链表长度>=8,则扩容哈希表
HashMap的静态内部类,Node类,即链表节点类
HashMap的静态内部类,TreeNode类,即红黑树的节点类
二、核心代码 putVal()
1.putVal()方法的整体逻辑
2.tab=table 是将堆内的哈希表table复制到栈内存中,提高运行速度
将参数hash值与哈希表取余后得到一个位置,这个位置的头节点对象的地址复制给p
n为哈希表的长度
i为哈希表的下标