如果两个不同的对象具有相同的哈希码,会发生什么情况?
我的理解是,两个不相等的对象可以具有相同的哈希码。在添加或从HashMap java检索时如何处理这个问题?
我的理解是,两个不相等的对象可以具有相同的哈希码。在添加或从HashMap java检索时如何处理这个问题?
它们将被添加到同一存储桶中,并将用于区分它们。每个存储桶可以包含具有相同哈希代码的对象列表。equals()
从理论上讲,您可以为给定类的任何对象返回与哈希代码相同的整数,但这意味着您将失去哈希映射的所有性能优势,并且实际上会将对象存储在列表中。
在HashMap中,键及其关联值存储在存储桶中的链接列表节点中,并且基本上使用equals()方法而不是通过哈希码在哈希映射中比较键。
hm.put("a","aValue"); // Suppose hashcode created for key "a" is 209
hm.put("b","bValue"); // Here hashcode created for key "b" is 209 as well.
a.equals(b)
true
bValue
aValue
bValue
a.equals(b)
false
get("b")
bValue
a.equals(b)
false