get
1、先计算出key对应的hash值
2、对超出数组范围的hash值进行处理
3、根据正确的hash值(下标值)找到所在的链表的头结点
4、遍历链表,如果key值相等,返回对应的value值,否则返回null
put
1、先计算出key对应的hash值
2、对超出数组范围的hash值进行处理
3、根据正确的hash值(下标值)找到所在的链表的头结点
4、如果头结点==null,直接将新结点赋值给数组的该位置
5、否则,遍历链表,找到key相等的节点,并进行value值的替换,返回旧的value值
6、如果没有找到,采用尾插法(1.8)/头插法(1.7)创建新结点并插入到链表中
7、将存储元素数量+1
8、校验是否需要扩容
resize
1、resize发生在table初始化, 或者table中的节点数超过threshold值的时候, threshold的值一般为负载因子乘以容量大小.
2、每次扩容都会新建一个table, 新建的table的大小为原大小的2倍.
3、扩容时,会将原table中的节点re-hash到新的table中, 但节点在新旧table中的位置存在一定联系: 要么下标相同, 要么相差一个原table的大小.