Любая разумная реализация Map
(не только HashMap
) даст вам такой результат.A Map
хранит пары ключей и значения.Когда вы get
получаете значение для ключа, он смотрит, равен ли один из сохраненных ключей заданным ключам, и дает вам соответствующее значение.Согласно вашему определению Map
, a1
и a3
равны.Поэтому, когда вы делаете map.get(a3)
, вы получаете значение a3
.
Кроме того, не рекомендуется обновлять ключ после его использования в Map
.Хотя здесь это не является реальной проблемой, это может привести к непредсказуемым результатам, если вы обновите поля, используемые в методах hashCode
и equals
.
Что вы хорошо сделали: вы переопределили equals
и hashCode
последовательно.