HashMap 相关方法的源码?
JDK8 之前 hash:计算元素 key 的散列值 ① 处理 String 类型时,调用 stringHash32 方法获取 hash 值。 ② 处理其他类型数据时,提供一个相对于 HashMap 实例唯一不变的随机值 hashSeed 作为计算初始量。 ③ 执行异或和无符号右移使 hash 值更加离散,减小哈希冲突概率。 indexFor:计算元素下标 将 hash 值和数组长度-1 进行与操作,保证结果不会超过 table 数组范围。 get:获取元素的 value 值 ① 如果 key 为 null,调用 getForNullKey 方法,如果 size 为 0 表示链表为空,返回 null。如果 size 不为 0 说明存在链表,遍历 table[0] 链表,如果找到了 key 为 null 的节点则返回其 value,否则返回 null。 ② 如果 key 为 不为 null,调用 getEntry 方法,如果 size 为 0 表示链表为空,返回 null 值。如果 size 不为 0,首先计算 key 的 hash 值,然后遍历该链表的所有节点,如果节点的 key 和 hash 值都和要查找的元素相同则返回其 Entry 节点。 ③ 如果找到了对应的 Entry 节点,调用 getValue 方法获取其 value 并返回,否则返回 null。 put:添加元素 ①