Sobes.tech
Middle

Mida tagastab meetod HasMap.get(), kui meetodid equals ja hashCode ei ole üle kirjutatud?

sobes.tech AI

Vastus AI-lt

null tagastatakse, kui otsitav võti ei ole täpselt sama objekt (samal viitel), mis oli sisestamisel kasutatud.

Põhjus on selles, et HashMap kasutab hashCode() ja equals() kombinatsiooni, et määrata "võtmete" võrdlus. Kui neid meetodeid ei ole üle kirjutatud, kasutatakse Object klassi implementatsioone.

  1. Object.hashCode() tagastab tavaliselt väärtuse, mis põhineb objekti mäluaadressil, see tähendab, et iga eksemplari jaoks unikaalne.
  2. Object.equals() kontrollib lihtsalt viitevõrdlust (this == obj).

Seetõttu, et HashMap.get() leiaks elemendi kasutades vaikimisi equals() ja hashCode(), peavad mõlemad tingimused olema täidetud:

  • Hash-koodid (Object.hashCode()) peavad olema võrdsed, mis on väga ebatõenäoline erinevate objektide puhul.
  • Objekti viited peavad olema võrdsed (Object.equals()), see tähendab, et tegemist peab olema sama eksemplar.

Kui paned objekti HashMap-i ja seejärel üritad seda saada kasutades teist objekti sama väljade väärtustega (aga mitte sama eksemplar), siis hashCode ja equals vaikimisi peavad neid erinevaks, ning get() tagastab null.