碰撞链中的散列码碰撞处理

时间:2016-09-13 12:29:01

标签: java hashmap hash-collision

让我们考虑HashMap,它使用单独的链接来解决哈希码冲突。

如果我有多个条目,其中hascode相同,则冲突机制会形成所有条目的链表链。

现在,让我们考虑一个案例,其中这样的链表存在:

(K1,V1,->) (K2,V2, ->) (K7,V7,->) (K9,V9,)

现在有一个新条目进入,哈希码的格式相同,并且密钥与K7具有相同的值。它会覆盖K7的现有价值吗?

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:0)

关于哈希冲突解决方案的hashmap函数public V put(K key, V value) explains的定义。

  

将指定的值与此映射中的指定键相关联。如果   地图以前包含键的映射,旧值是   更换。

putVal()

调用的put()代码段
633             if (p.hash == hash &&
634                 ((k = p.key) == key || (key != null && key.equals(k))))
635                 e = p;
...
652             if (e != null) { // existing mapping for key
653                 V oldValue = e.value;
654                 if (!onlyIfAbsent || oldValue == null)
655                     e.value = value;
656                 afterNodeAccess(e);
657                 return oldValue;
658             }