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։