0

我只是想了解HashMap.getJava方法背后的算法。

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

4

1 回答 1

0

摘自Java HashMap 如何处理具有相同哈希码的不同对象?

hashmap 是这样工作的(这有点简化,但它说明了基本机制):

它有许多“桶”,用于存储键值对。每个桶都有一个唯一的数字——这就是标识桶的原因。当你把一个key-value对放入map中时,hashmap会查看key的hash code,并将pair存放在标识符为key的hash code的bucket中。例如:key的hash code是235 -> 对存储在235号桶中。(注意一个桶可以存储多于一个键值对)。

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

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

看上面的机制,也可以看出对key的hashCode()和equals()方法有什么要求:

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

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

于 2013-09-26T03:51:06.500 回答