logo

A HashMap működése Java nyelven


Mi az a Hashing

Ez egy objektum egész értékké alakításának folyamata. Az egész érték segít az indexelésben és a gyorsabb keresésben.

Mi az a HashMap

A HashMap a Java gyűjtési keretrendszer része. A Hashing nevű technikát használja. Megvalósítja a térképes felületet. Az adatokat a Kulcs és Érték párban tárolja. A HashMap a csomópontok tömbjét tartalmazza, és a csomópont osztályként van ábrázolva. A kulcs és az érték tárolására belsőleg tömböt és LinkedList adatstruktúrát használ. A HashMap négy mezőt tartalmaz.

A HashMap működése Java nyelven

Mielőtt megértené a HashMap belső működését, ismernie kell a hashCode() és equals() metódusokat.

gimp távolítsa el a vízjelet
    egyenlő ():Ellenőrzi két objektum egyenlőségét. Összehasonlítja a kulcsot, függetlenül attól, hogy egyenlők-e vagy sem. Ez az Object osztály egyik metódusa. Felülírható. Ha felülírja az equals() metódust, akkor kötelező felülbírálni a hashCode() metódust.hash kód():Ez az objektumosztály metódusa. Egész alakban adja vissza az objektum memóriareferenciáját. A metódusból kapott értéket használjuk vödörszámként. A vödör száma a térképen belüli elem címe. A null kulcs hash kódja 0.Vödörek:A csomópont tömbjét vödörnek nevezzük. Minden csomópontnak van egy adatszerkezete, például egy LinkedList. Egynél több csomópont megoszthatja ugyanazt a tárolót. A kapacitása eltérő lehet.
A HashMap működése Java nyelven

Kulcs, értékpár beszúrása a HashMap-be

Put() metódust használunk a kulcs és érték pár beillesztésére a HashMap-be. A HashMap alapértelmezett mérete 16 (0-tól 15-ig).

Példa

A következő példában három (Kulcs, Érték) párt szeretnénk beszúrni a HashMap-be.

 HashMap map = new HashMap(); map.put('Aman', 19); map.put('Sunny', 29); map.put('Ritesh', 39); 

Nézzük meg, hogy a kulcs, érték pár melyik indexnél kerül mentésre a HashMap-be. Amikor meghívjuk a put() metódust, akkor az kiszámítja az 'Aman' kulcs hash kódját. Tegyük fel, hogy az 'Aman' hash kódja 2657860. Ahhoz, hogy a kulcsot a memóriában tároljuk, ki kell számítanunk az indexet.

Index kiszámítása

Az index minimalizálja a tömb méretét. Az index kiszámításának képlete a következő:

 Index = hashcode(Key) & (n-1) 

Ahol n a tömb mérete. Ezért az 'Aman' index értéke:

 Index = 2657860 & (16-1) = 4 

A 4-es érték az a számított indexérték, amelyben a kulcs és az érték a HashMap-ben tárolódik.

A HashMap működése Java nyelven

Hash ütközés

Ez az eset áll fenn, ha a számított indexérték megegyezik két vagy több kulcs esetében. Számítsuk ki egy másik „Sunny” kulcs hash kódját. Tegyük fel, hogy a 'Sunny' hash kódja 63281940. Ahhoz, hogy a kulcsot a memóriában tároljuk, az indexképlet segítségével indexet kell kiszámítanunk.

Rajinikanth
 Index=63281940 & (16-1) = 4 

A 4-es érték az a számított indexérték, ahol a kulcsot a HashMap tárolja. Ebben az esetben az equals() metódus ellenőrzi, hogy mindkét kulcs egyenlő-e vagy sem. Ha a kulcsok azonosak, cserélje ki az értéket az aktuális értékre. Ellenkező esetben csatlakoztassa ezt a csomópontobjektumot a meglévő csomópontobjektumhoz a LinkedList segítségével. Ezért mindkét kulcs a 4-es indexen lesz tárolva.

A HashMap működése Java nyelven

Hasonlóképpen tároljuk a „Ritesh” kulcsot. Tegyük fel, hogy a kulcs hash kódja 2349873. Az index értéke 1 lesz. Ezért ez a kulcs az 1-es indexen lesz tárolva.

A HashMap működése Java nyelven

get() metódus a HashMapben

A get() metódus az értéket a kulcsával kapja meg. Nem fogja lekérni az értéket, ha nem ismeri a kulcsot. A get(K Key) metódus meghívásakor kiszámítja a kulcs hash kódját.

Tegyük fel, hogy el kell hoznunk az 'Aman' kulcsot. A következő módszert hívják meg.

 map.get(new Key('Aman')); 

A hash kódot 2657860-ként állítja elő. Most számítsa ki a 2657860 indexértéket az indexképlet segítségével. Az index értéke 4 lesz, ahogy fentebb kiszámoltuk. get() metódus keresi az index értékét 4. Összehasonlítja a Key első elemet az adott Kulccsal. Ha mindkét kulcs egyenlő, akkor az else check értéket adja vissza a csomópont következő eleméhez, ha létezik. A mi forgatókönyvünkben ez a csomópont első elemeként található, és a 19 értéket adja vissza.

int egy string java

Vegyünk egy másik kulcs „Sunny”-t.

A 'Sunny' kulcs hash kódja 63281940. A 63281940 számított indexértéke 4, ahogy a put() metódushoz számoltuk. Lépjen a tömb 4. indexére, és hasonlítsa össze az első elem kulcsát a megadott kulccsal. A kulcsokat is összehasonlítja. A mi forgatókönyvünkben az adott kulcs a második elem, a csomópont következő eleme pedig null. Összehasonlítja a második Key elemet a megadott Kulccsal, és a 29 értéket adja vissza. Null értékkel tér vissza, ha a következő csomópont nulla.