让我们考虑HashMap
,它使用单独的链接来解决哈希码冲突。
如果我有多个条目,其中hascode相同,则冲突机制会形成所有条目的链表链。
现在,让我们考虑一个案例,其中这样的链表存在:
(K1,V1,->) (K2,V2, ->) (K7,V7,->) (K9,V9,)
现在有一个新条目进入,哈希码的格式相同,并且密钥与K7具有相同的值。它会覆盖K7的现有价值吗?
答案 0 :(得分:5)
是的,它会覆盖代表value
的现有节点中的K7
引用。
答案 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 }