如果两个不同的对象具有相同的哈希码,会发生什么情况?

2022-09-02 11:54:44

我的理解是,两个不相等的对象可以具有相同的哈希码。在添加或从HashMap java检索时如何处理这个问题?


答案 1

它们将被添加到同一存储桶中,并将用于区分它们。每个存储桶可以包含具有相同哈希代码的对象列表。equals()

从理论上讲,您可以为给定类的任何对象返回与哈希代码相同的整数,但这意味着您将失去哈希映射的所有性能优势,并且实际上会将对象存储在列表中。


答案 2

在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)truebValueaValuebValue
  • 如果返回 ,则会在存储桶列表中创建另一个节点,因此当您调用时,您将获得 from is 。a.equals(b)falseget("b")bValuea.equals(b)false

推荐