为什么HashMap的get方法有一个FOR循环?
我正在查看Java 7中的源代码,我看到该方法将检查是否存在任何条目,如果它存在,那么它将用新值替换旧值。HashMap
put
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
因此,基本上这意味着给定的键始终只有一个条目,我也通过调试看到了这一点,但是如果我错了,请纠正我。
现在,既然给定键只有一个条目,为什么该方法有一个FOR循环,因为它可以简单地直接返回值?get
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;
}
我觉得上面的循环是不必要的。如果我错了,请帮助我理解。