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։