HashMap 之Hash碰撞
Hash碰撞的意思是Hash值相同。golang 的Map数据类型是使用链表法来处理Hash碰撞
链表法:
- 系统总是将新添加的 Entry 对象放入 table 数组的 bucket Index 索引处
- 当新对象的key计算出hash值后,插入数组的指定位置中。如果两个 Entry的 key的 hashCode()返回值相同,那它们的存储位置相同。
- 如果这两个 Entry的 key通过equals比较返回 true,新添加 Entry的 value将覆盖集合中原有 Entry的 value,但key不会覆盖。
- 如果这两个 Entry的 key通过equals比较返回 false,新添加的 Entry将与集合中原有 Entry形成 Entry链,而且新添加的 Entry位于 Entry链的头部。