Потому что в HashMap
могут быть коллизии (то есть разные ключи, которые выдают одинаковые bucketIndex
). Если они сделали то, что вы предлагаете, в случае коллизии последний вставленный элемент удалит предыдущие в случае коллизии, возможно, практически непредсказуемым образом.
Entry
реализован как какой-то связанный список, поэтому он на самом деле немного неправильно назван и фактически является узлом связанного списка записей. По этой причине e
передается как последний параметр конструктора Entry
.
Создание нового Entry
, который ссылается на предыдущий (e
), и добавление его в тот же место, где e
была операция вставки нового узла в начале связанного списка, и работает, даже если e
было null
(т.е. не было никакого столкновения вообще, а созданный Entry
является первый с заданным bucketIndex
).