Почему get возвращает «null», если «два экземпляра имеют хэш в одном и том же сегменте»?Какова роль (не получение правильного экземпляра) оптимизации HashMap «которая обналичивает ...»?
Ключевое предложение:
[...] не беспокоится о проверке равенства объектов, если хеш-коды не совпадают.
Так что, даже если ключи хешируются в одно и то же ведро, .equals
может не вызываться (из-за оптимизации кэширования) для соответствующего элемента (поскольку даже хеш-коды не совпадают).Таким образом, даже если соответствующий элемент находится в одном и том же сегменте, он никогда не может сравниваться через .equals
и, следовательно, не «найден».
Только для случая - «дваСлучаи случаются с хэшем в том же контейнере "- что если HashMap беспокоится о" равенстве объектов, если хеш-коды не совпадают "?* иметь эту оптимизацию, и на самом деле сделал проверку .equals
на всех элементах в соответствующем сегменте и , если два хэша оказались с хешем одного и того же сегмента, то метод get будетверните правильный элемент.(Но это было бы чистой удачей, так как если объекты не равны, то нет никакой гарантии, что эти два хэша будут отображаться в одно и то же ведро в первую очередь.)