HashMap系列文章(传送门):
二:源码级理解HashMap之resize()方法,带你一行行手撕
三:源码级理解HashMap之putVal()方法,一行行手撕源码
四:源码级理解HashMap之get()和remove()方法
壹:带你一行行读源码
前置知识(先看博主的前置文章):
1.扰动函数hash()函数,怎么实现的?有什么作用?
2.(n - 1) & hash
什么用?怎么实现的?
3.resize()扩容方法
4.树化,红黑树相关操作
public V put(K key, V value) {
//调用putVal()方法
//传入的参数:经过哈希扰动和hashcode,key,val,onlyIfAbsent,evict
return putVal(hash(key), key, value, false, true);
}
//这里得到onlyIfAbsent表示如果hash冲突时,新值是否替换旧值,false表示替换
//evict我们用不到,暂时不分析
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
//这里首先定义了几个临时变量
//table表示当前的散列表
//p表示当前散列表的元素
//n表示散列表数组的长度
//i表示寻址的结果
Node<K,V>[] tab; Node<K,V