HashMap.get方法如何工作

时间:2013-09-26 02:13:14

标签: java hashmap

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

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

1 个答案:

答案 0 :(得分:0)

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

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

它有许多用于存储键值对的“桶”。每个桶都有一个唯一的编号 - 这就是识别存储桶的内容。将键值对放入映射时,哈希映射将查看键的哈希码,并将该对存储在桶中,其中标识符是键的哈希码。例如:密钥的哈希码是235 - >该对存储在桶号235中。(注意,一个桶可以存储多个键值对)。

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

现在你可以看到这对于在地图中查找键值对非常有效:通过键盘的哈希码,哈希表可以立即知道要查看哪个桶,这样它只需要测试中的内容。那桶。

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

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

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