HashMap 内部有方法hash()通过应用特殊函数来防止写得不好的哈希码。下一步是hash()方法的返回值用于计算新条目存储在名为table的支持数组中的索引。两个不同键的索引可能相同。因为使用了该链接列表,但我很清楚。
为什么两个不同键的后备表索引可以相同?
我知道哈希码可能很难被覆盖,但方法hash()声明它可以防止哈希码冲突。那么为什么后备表的索引可以相同呢?
编辑感谢大家的回复。当您放入 HashMap ( size ) 的元素数量大于或等于 threshhold 时,@Dunkan Jones 会自动调整大小(根据构造函数中提供的 initialCapacity 和 loadFactor 计算)。查看方法 createEntry -每当创建新条目时,大小都会增加。我的问题是为什么 hash() 方法 + indexFor() 方法为不同的对象返回相同的索引。由于这个相同的索引,两个条目通过链表放在同一个桶中。
是什么导致 hash() + indexFor() 方法返回相同的索引?
我认为并且无法意识到那些棘手的 >>> 和 & 运算符的 hash() 和 indexFor() 做什么?
HashMap 中的散列是什么意思?
再次感谢!