Middle
Какво ще върне методът HasMap.get(), ако методите equals и hashCode не са презаписани?
sobes.tech AI
Отговор от AI
null ще бъде върнато, ако ключът, който се използва за търсене, не е точно същият обект (има същата референция), който е използван при добавянето на елемента.
Причината е, че HashMap използва комбинация от hashCode() и equals() за определяне на "равенството" на ключовете. Ако тези методи не са презаписани, се използват реализациите от Object.
Object.hashCode()обикновено връща стойност, базирана на адреса на обекта в паметта, тоест уникална за всеки екземпляр.Object.equals()просто проверява референциалната равност (this == obj).
Следователно, за HashMap.get() да намери елемент, използвайки непремодрирани equals и hashCode, трябва да са изпълнени и двете условия:
- Хеш-кодовете (
Object.hashCode()) трябва да са равни, което е много малко вероятно за различни обекти. - Обектите трябва да са референциално равни (
Object.equals()), тоест, това трябва да е същият екземпляр.
Ако поставите обект в HashMap и след това се опитате да го получите, използвайки друг обект със същите стойности на полетата (но не същия екземпляр), hashCode и equals по подразбиране ще ги разглеждат като различни, и get() ще върне null.