有人可以解释一下hashmap get(key)方法的代码吗?

时间:2013-08-10 08:49:32

标签: java collections hashmap

在Java的get(Object key)方法中,有一段我无法理解的代码。

我知道get(key)方法是如何工作的,即使哈希码对于两个对象是相同的。

但下面的代码我无法理解。

for (Entry<K,V> e = table[indexFor(hash, table.length)];
              e != null;
              e = e.next) {
             Object k;
             if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
                 return e.value;
         }

有人可以解释一下。 感谢

1 个答案:

答案 0 :(得分:1)

HashMap适用于Hash bucket algorithm。 Hash存储桶排列为HashMap类调用为table的数组。因此for循环从包含key

的哈希桶的第一个元素开始
Entry<K,V> e = table[indexFor(hash, table.length)

此处hash代表该存储桶的哈希索引


for循环将一直运行,直到存储桶中有元素(e != null


for循环将像e = e.next一样迭代,也就是说,移动到存储桶中的下一个元素,直到找到匹配为止


现在,一旦找到哈希桶,该方法应该返回其密钥与传递的key匹配的确切Entry。现在,此匹配由引用匹配==)或等于匹配 (k = e.key) == key || key.equals(k)

完成

如果匹配发生,则返回密钥,否则方法将返回null