Почему в HashMap используется хэшкод, а не просто ссылки?
Эквивалентные объекты должны иметь эквивалентные идентификаторы.
Ссылки этого не могут обеспечить.
Хэшкод используется для проверки уникальности сохраняемых объектов ключей. Но так как уникальность хэша ограничена длиной типа int, то может возникать коллизия для этого и используются связные списки объектов с одинаковыми хэшкодами.
Почему же не просто ссылки? Представьте, что мы последовательно добавляем в Map два эквивалентных  объекта-ключа, ссылки у них разные. Получается в Map будет два объекта, они имеют одинаковые хэши, но разные ссылки. А, по определению, в Map все ключи должны быть уникальны.