几个常量:
数组的默认大小16、扩容因子0.75、所以第一个扩容临界节点个数12、链表上限8,大于8链表转化为红黑树,但有一个前提,此时整个数据结构中的节点数要大于64,如果小于64,链表的长度为8时,将进行扩容、红黑树中的阶段个数如果小于6将红黑树转化为链表。
节点node<k,v>中的内容
Hash值:代表存储在数组中的那一个位置
Key,value
Node<k,v> next;链表结构中的下一个节点。
Hash()函数:
使用int接收hash,是key.hashcode()的高16位于低16位异或操作。所以Hash值32位。
几个变量:
Node<k,v>[] table; 数组表
Int size; 当前的节点使用个数
Int threshold; 当前扩容节点数阈值 第一次为12
Put()方法:
本质调用putVal(key.hash(),key,value,…);方法
第一次调用put方法时,
1.首先会调用resize()方法进行初始化。
初始化后,threshold = 12;table表的长度为16.
2.然后计算插入的位置计算
计算位置(数组下标)方法: (n-1)&hash 将坐标控制在15之内(意思是15位之前都是0)
3.插入节点
new一个