您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java HashMap如何使用相同的哈希码处理不同的对象?

Java HashMap如何使用相同的哈希码处理不同的对象?

哈希图的工作方式如下(这有点简化,但它说明了基本机制):

它具有多个“存储桶”,用于存储键值对。每个存储桶都有一个唯一的数字-标识存储桶。将键值对放入地图时,哈希图将查看键的哈希码,并将该对存储在标识符为键的哈希码的存储桶中。例如:密钥的哈希码为235->该对存储在存储区号235中。(请注意,一个存储区可以存储多于一个键值对)。

当您在哈希图中查找值时,通过为其提供键,它将首先查看您提供的键的哈希码。哈希图随后将查看相应的存储桶,然后将您提供的密钥与存储桶中所有对的密钥进行比较,方法是将它们与进行比较equals()

现在,您将看到这对于在映射中查找键值对非常有效:通过哈希键的哈希码,哈希图可以立即知道要在哪个存储桶中查找,因此只需要针对该存储桶中的内容进行测试。

通过上述机制,您还可以看到对键hashCode()和equals()方法有什么要求:

如果两个键相同(比较时equals()返回true),则它们的hashCode()方法必须返回相同的数字。如果键违反了此规则,则相等的键可能会存储在不同的存储桶中,并且哈希图将无法找到键值对(因为它将在同一存储桶中查找)。

如果两个键不同,那么它们的哈希码是否相同并不重要。如果它们的哈希码相同,它们将存储在同一存储桶中,在这种情况下,哈希图将用于equals()区分它们。

java 2022/1/1 18:16:53 有565人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶