Kezdőoldal » Számítástechnika » Programozás » A javában mire jó a hashcode?

A javában mire jó a hashcode?

Figyelt kérdés
2019. máj. 18. 18:04
 1/3 anonim ***** válasza:

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.

2019. máj. 18. 19:20
Hasznos számodra ez a válasz?
 2/3 anonim ***** válasza:
Előző válaszolót kiegészítve, tipikus adatstruktúrák amik használják pl a HashMap és a HashSet. Ha implementálsz egy equals-t akkor kell mellé a hashcode is különben nem fognak megfelelően működni ezek az adattípusok.
2019. máj. 18. 20:26
Hasznos számodra ez a válasz?
 3/3 anonim ***** válasza:

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.

2019. máj. 21. 16:41
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!