Я рассматриваю исходный код для HashMap
в Java 7, и я вижу, что метод 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;
}
}
Таким образом, в основном это означает, что всегда будет только одна запись для данного ключа, я тоже это видел, отлаживая, но если я ошибаюсь, пожалуйста, исправьте меня.
Теперь, поскольку для данного ключа имеется только одна запись, почему метод get
имеет цикл FOR, поскольку он мог просто вернуть значение напрямую?
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;
}
Я чувствую, что вышеуказанный цикл не нужен. Пожалуйста, помогите мне понять, если я ошибаюсь.