A javában mire jó a hashcode?
Egyedileg kell generálni minden objektumra. Azért van, mert ha két dolog megegyezik, akkor a hashcode is meg kell egyezzen. Magyarul alternatíva az equals helyett/mellé. Azonban a használata nem arra van, hogy egymással hasonlítsd össze az objektumokat, hanem hogy csoportosítva hash szerint lehet őket tárolni (vödrös hash-elésre keress rá). Ez azért jó, mert így egy nagy listában töredéke a szükséges idő a keresésnek.
Mondjuk tegyük fel, hogy úgy generálunk valahogy egy hasht, és 10 "vödörben" tároljuk a dolgokat, az alapján hogy mi a hash utolsó számjegye. Tegyük fel, hogy tudni akarjuk, van-e már nekünk olyan objektum, aminek a név mezője "kiss pista". Ha a hashcode-ot a név alapján generáljuk, akkor észre lehet venni, hogy a hashcode alapján csak az egyik vödörben lehet, a többi 9et nem kell átnézni, így tizedannyi a keresési idő. Ha abban a vödörben nincs, a többiben sem lehet. Remélem érthetően fogalmaztam.
Akkor kifejtem rendesen, hogy hogyan használja pl egy HashMap ezeket, hogy teljes képet kapj.
A default Java collectionok 2 fázisban keresik meg a megadott elemet egy hash alapú adatszerkezetben. Első lépésben kikérik az objektumpéldány hashcodeját, ami alapján leszűkíti egy relatíve kicsi elemszámra(általában 1) a lehetséges találatokat. Ha nincs találat a hashre, akkor nincs az adatszerkezetben az objektun. Ezután a jelölteken egyessével meghívja az equals metódust, így egy teljes egyezést tud vizsgálni. De miért is kell ez? Ha megnézed az API-t, láthatod, hogy a hashcode intet ad vissza. Ez 2147483647 lehetőséget jelent, amivel a hashcode egyedileg tudná azonosítani az elhelyezett objektumokat. Lehetnek olyan esetek, amikor ez kevés. Ekkor ha 2 jelölt van egy matchre, sem lesz ütközés a kollekcióban.
Ez azt jelenti, hogy minden esetben, ahol az equals truet ad vissza, akkor a hashcode-nak is egyeznie kell, fordítva viszont ez nem igaz.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!