HashMap的putVal方法:插入一个新的键值对,如果该键存在,则用新值覆盖旧值,方法返回值为旧值,如果该键不存在,方法返回值为null。
参数说明:
hash:根据静态方法hash获得的hash值,此hash值为key的哈希值
key:键
value:值
onlyIfabsent:如果onlyfabsent为true,则当键相同时,不修改已存在的值,值为null的话也会修改
evict:如果evict为false,则hashmap的table处于创建模式
代码解析:
final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { HashMap.Node[] tab; int n; //把当前存放节点的数组的引用赋值给局部变量tab,把当前存放节点的数组的长度赋值给n //如果引用为空或者数组长度为0,则对该数组扩容,将扩容后的长度赋值给n,每次扩容后的长度为2的n次幂 if ((tab = this.table) == null || (n = tab.length) == 0) { n = (tab = this.resize()).length; } Object p; int i; //通过hash函数得到的hash值的范围在-2147483648和2147483648之间 //但内存放不下这么长的数组,需要对数组长度取余,得到的余数就是对应的数组下标,即hash%length