Sobes.tech
Middle

Какво ще върне методът HasMap.get(), ако методите equals и hashCode не са презаписани?

sobes.tech AI

Отговор от AI

null ще бъде върнато, ако ключът, който се използва за търсене, не е точно същият обект (има същата референция), който е използван при добавянето на елемента.

Причината е, че HashMap използва комбинация от hashCode() и equals() за определяне на "равенството" на ключовете. Ако тези методи не са презаписани, се използват реализациите от Object.

  1. Object.hashCode() обикновено връща стойност, базирана на адреса на обекта в паметта, тоест уникална за всеки екземпляр.
  2. Object.equals() просто проверява референциалната равност ( this == obj ).

Следователно, за HashMap.get() да намери елемент, използвайки непремодрирани equals и hashCode, трябва да са изпълнени и двете условия:

  • Хеш-кодовете (Object.hashCode()) трябва да са равни, което е много малко вероятно за различни обекти.
  • Обектите трябва да са референциално равни (Object.equals()), тоест, това трябва да е същият екземпляр.

Ако поставите обект в HashMap и след това се опитате да го получите, използвайки друг обект със същите стойности на полетата (но не същия екземпляр), hashCode и equals по подразбиране ще ги разглеждат като различни, и get() ще върне null.