Ključna razlika – jednako u odnosu na hashCode u Javi
Jednako je slično operatoru==, koji treba da testira identitet objekta, a ne jednakost objekta. HashCode je metoda pomoću koje klasa implicitno ili eksplicitno razlaže podatke pohranjene u instanci klase u jednu heš vrijednost, koja je 32-bitni cijeli broj s predznakom. Ključna razlika između jednakosti i hashCode-a u Javi je u tome što se jednaki koristi za poređenje dva objekta, dok se hashCode koristi u heširanju da bi se odlučilo u koju grupu bi objekat trebao biti kategoriziran.
Šta je jednako u Javi?
Metoda jednakosti se koristi za poređenje dva objekta. Standardna metoda jednaka definirana je u klasi objekata. Ta implementacija je slična operatoru==. Dvije reference objekta su jednake samo ako upućuju na isti objekt. Moguće je nadjačati metod jednakosti.

Slika 01: Java program sa jednakima
Izjava System.out.println(s1.equals(s2)) će dati odgovor netačan jer se s1 i s2 odnose na dva različita objekta. Bilo je slično izjavi, System.out.println(s1==s2);
Izjava System.out.println(s1.equals(s3)) će dati odgovor istinit jer se s1 i s3 odnose na isti objekat. Bilo je slično izjavi, System.out.println(s1==s3);
Ne postoji metoda jednakih u klasi Student. Stoga se poziva jednako u klasi Object. Tačno se prikazuje samo ako referenca objekta pokazuje na isti objekt.

Slika 02: Java program sa nadjačanim jednako
Prema gore navedenom programu, metoda jednakosti je poništena. Objekt se prosljeđuje metodi, a tip se prebacuje na Student. Zatim se provjeravaju id vrijednosti. Ako su id vrijednosti slične, vratit će true. Ako nije, vratit će se false. ID-ovi s1 i s2 su slični. Dakle, štampaće tačno. ID-ovi s1 i s3 su također slični, tako da će ispisati true.
Šta je hashCode u Javi?
HashCode se koristi u heširanju kako bi se odlučilo u koju grupu treba biti kategoriziran objekt. Grupa objekata može dijeliti isti hashCode. Ispravna funkcija heširanja može ravnomjerno rasporediti objekte u različite grupe.
Ispravan hashCode može imati svojstva kako slijedi. Pretpostavimo da postoje dva objekta kao obj1 i obj2. Ako je obj1.equals(obj2) istina, tada je obj1.hashCode() jednak obj2.hashCode(). Ako je obj1.equals(obj2) netačan, nije neophodno da obj1.hashCode() nije jednak obj2.hashCode(). Dva nejednaka objekta mogu također imati isti hashCode.

Slika 03: Razred učenika sa jednakima i hashCode

Slika 04: Glavni program
Klasa Student sadrži metode equals i hashCode. Metoda equals u klasi Student će dobiti objekat. Ako je objekt null, vratit će false. Ako klase objekata nisu iste, vratit će se false. Vrijednosti id-a se provjeravaju u oba objekta. Ako su slični, vratit će se true. Inače će vratiti false.
U glavnom programu kreiraju se objekti s1 i s2. Prilikom pozivanja s1.equals(s2) će dati true jer je metoda equals nadjačana i provjerava id vrijednosti dva objekta. Iako se odnose na dva objekta, odgovor je tačan jer su id vrijednosti s1 i s2 iste. Kako je s1.equals(s2) istinit, hashCode za s1 i s2 bi trebao biti jednak. Ispis hashCode-a s1 i s2 daje istu vrijednost. Metoda hashCode se može koristiti sa kolekcijama kao što je HashMap.
Koja je razlika između jednakosti i hash koda u Javi?
jednako vs hashCode u Javi |
|
equals je metoda u Javi koja djeluje slično operatoru==, koji je da testira identitet objekta, a ne jednakost objekta. | hashCode je metoda pomoću koje klasa implicitno ili eksplicitno razlaže podatke pohranjene u instanci klase u jednu hash vrijednost. |
Upotreba | |
Metoda jednako se koristi za poređenje dva objekta. | Metoda se koristi u heširanju da bi se odlučilo u koju grupu treba staviti objekat. |
Sažetak – jednako u odnosu na hashCode u Javi
Razlika u jednakosti i hashCode-u u Javi je u tome što se jednaki koriste za poređenje dva objekta, dok se hashCode koristi u heširanju da bi se odlučilo u koju grupu bi objekat trebao biti kategoriziran.