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

Joe*_*oey 17 java equals hashmap hashcode

据我所知,两个不相等的对象可以具有相同的哈希码.在从HashMap java添加或检索时如何处理?

Ale*_*man 28

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

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


小智 7

在HashMap中,键及其关联值存储在存储桶中的链接列表节点中,并且基本上使用equals()方法而不是hashcode在hashmap中比较键.

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.
Run Code Online (Sandbox Code Playgroud)
  • 如果a.equals(b)返回true,bValue将替换aValue并将bValue返回.
  • 如果a.equals(b)回报false,另一个节点将在遗愿清单创建,所以当你打电话get("b"),你会得到bValue,因为a.equals(b)false.