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.
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
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.
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.
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.
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.