equals()
Az equals() a két objektum tartalmának egyezőségét vizsgálja. Gyakran nevezik egyenlőség-összehasonlításnak, és ha nem definiáljuk újra az equals() metódust, akkor belsőleg a == operátorral egyenértékű, azaz azonosság-összehasonlítást végez. Ezért, ha helyesen szeretnénk két objektumot egyenlőség szempontjából összehasonlítani, mindenképpen az equals() metódust kell használnunk.
hashCode()
A hashCode() metódus azt vizsgálja, hogy két objektum azonos-e. Hasonló a == operátorhoz, azaz azonosság-összehasonlítást végez, de a hashCode() metódus futási időben egy egyedi egész számot ad vissza az objektumra vonatkozóan. Általában a Heap-en tárolt objektum memóriacímét adja vissza.
Ez a metódus a native kulcsszóval van ellátva, ami azt jelzi, hogy Java-n kívüli nyelven fejlesztett kódot használunk Java környezetben.
Mi a hash?
A hasholás egy olyan folyamat, amelyben egy hash függvény segítségével egy változó méretű bemeneti értéket átalakítunk egy fix méretű kimenetté. A hasholás eredményeként kapott értéket hash kódoknak nevezzük.
equals() és hashCode()
Az azonos objektumoknak azonos memóriacímmel kell rendelkezniük, ezért nyilvánvaló, hogy az azonos objektumoknak azonos hash kóddal kell rendelkezniük. Ezért célszerű az equals() metódus mellett a hashCode() metódust is felüldefiniálni, hogy biztosítsuk az azonos hash kódot.
Hash adatstruktúrák
Tegyük fel, hogy a HashSet adatstruktúrába két egyenlő objektumot illesztünk be. Ha kiírjuk a halmaz méretét, akkor 2-t kapunk. Miért?
Ez azért van, mert a hash alapú adatstruktúrák a kulcs meghatározásakor a hashCode() metódust használják. Azaz, mielőtt két objektumot egyenlőség szempontjából összehasonlítanának, először megnézik, hogy a hash kódjaik megegyeznek-e, majd ha igen, akkor döntenek arról, hogy a két objektum egyenlő-e. Ha a hashCode() metódus nincs felüldefiniálva, akkor az Object osztály hashCode() metódusát használja, ami a tárolt objektum memóriacímét adja vissza. Ezért, ha hash alapú adatstruktúrákat használunk, célszerű az equals() metódus mellett a hashCode() metódust is felüldefiniálni.
Forrás
Várható interjúkérdések és válaszok
Miért használjuk az equals() és a hashCode() metódust együtt?
A hash alapú adatstruktúrák a kulcs meghatározásakor a hashCode() metódust használják. Azaz, mielőtt két objektumot egyenlőség szempontjából összehasonlítanának, először megnézik, hogy a hash kódjaik megegyeznek-e, majd ha igen, akkor döntenek arról, hogy a két objektum egyenlő-e. Ha a hashCode() metódus nincs felüldefiniálva, akkor az Object osztály hashCode() metódusát használja, ami a tárolt objektum memóriacímét adja vissza. Ezért, ha hash alapú adatstruktúrákat használunk, célszerű az equals() metódus mellett a hashCode() metódust is felüldefiniálni.
Hozzászólások0