有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何实现HashMap。获得方法工作

我只是想了解Java中HashMap.get方法背后的算法

如何搜索特定对象?hashMap是如何在Java中实现的,它使用什么类型的搜索算法


共 (1) 个答案

  1. # 1 楼答案

    摘自How does a Java HashMap handle different objects with the same hash code?

    hashmap的工作原理如下(这有点简化,但它说明了基本机制):

    它有许多“bucket”,用来存储键值对。每个桶都有一个唯一的编号——这就是桶的标识。当您将一个键值对放入映射时,hashmap将查看该键的哈希代码,并将该对存储在标识符为该键的哈希代码的bucket中。例如:密钥的哈希代码是235->;该对存储在235号桶中。(请注意,一个bucket可以存储多个键值对)

    当你在hashmap中查找一个值时,通过给它一个键,它将首先查看你给出的键的哈希代码。hashmap随后将查看相应的bucket,然后将您提供的密钥与bucket中所有对的密钥进行比较,方法是将它们与equals()进行比较

    现在,您可以看到这对于在映射中查找键值对是如何非常有效:通过键的哈希代码,哈希映射立即知道要在哪个bucket中查找,因此它只需根据该bucket中的内容进行测试

    查看上述机制,您还可以看到对键的hashCode()和equals()方法有哪些必要的要求:

    如果两个键相同(比较时equals()返回true),则它们的hashCode()方法必须返回相同的数字。如果键违反了这一点,那么相等的键可能存储在不同的存储桶中,hashmap将无法找到键值对(因为它将在同一个存储桶中查找)

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