在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;
}
有人可以解释一下。 感谢
答案 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