我浏览了 HashMap 的源代码并有几个问题。PUT 方法采用 Key 和 Value 并执行
- 键的哈希码的哈希函数。
使用从上一步获得的哈希计算该对的存储桶位置
public V put(K key, V value) { int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); ..... } static int hash(int h) { h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); } static int indexFor(int h, int length) { return h & (length-1); }
例子:
- 创建一个大小为 10 的 HashMap。
- 调用 put(k,v) 三次并假设这 3 个占用桶 loc 7 ,8 和 9
- 看涨看跌第 4 对 K,V 对并发生以下情况
- 使用 key.hashcode() 调用 hash() 并计算哈希值
- indexFor是根据hash计算的
问题:
- 如果计算的第 4 个 k,v 的存储桶位置超出现有范围怎么办?说位置 11?
提前感谢阿赫