Rozdiel medzi rovná sa a hashCode v jazyku Java

Obsah:

Rozdiel medzi rovná sa a hashCode v jazyku Java
Rozdiel medzi rovná sa a hashCode v jazyku Java

Video: Rozdiel medzi rovná sa a hashCode v jazyku Java

Video: Rozdiel medzi rovná sa a hashCode v jazyku Java
Video: 14.5 LinkedList против ArrayList в Java 2024, Júl
Anonim

Kľúčový rozdiel – rovná sa hashCode v jazyku Java

Operátor rovná sa je podobný operátoru==, ktorý slúži na testovanie identity objektu a nie rovnosti objektu. HashCode je metóda, pomocou ktorej trieda implicitne alebo explicitne rozkladá údaje uložené v inštancii triedy na jedinú hodnotu hash, ktorou je 32-bitové celé číslo so znamienkom. Kľúčový rozdiel medzi rovná sa a hashCode v jazyku Java je v tom, že rovná sa používa na porovnanie dvoch objektov, zatiaľ čo hashCode sa používa pri hašovaní na rozhodnutie, do ktorej skupiny by mal byť objekt zaradený.

Čo sa rovná v Jave?

Metóda sa rovná sa používa na porovnanie dvoch objektov. Predvolená metóda sa rovná je definovaná v triede objektov. Táto implementácia je podobná operátoru==. Dve referencie na objekt sú rovnaké iba vtedy, ak ukazujú na rovnaký objekt. Je možné prepísať metódu rovná sa.

Rozdiel medzi rovná sa a hashCode v Jave
Rozdiel medzi rovná sa a hashCode v Jave

Obrázok 01: Program Java s rovnými

Výkaz System.out.println(s1.equals(s2)) dá odpoveď nepravdivú, pretože s1 a s2 odkazujú na dva rôzne objekty. Bolo to podobné ako vo vyhlásení System.out.println(s1==s2);

Výrok System.out.println(s1.equals(s3)) dá odpoveď pravdivú, pretože s1 a s3 sa týkajú rovnakého objektu. Bolo to podobné ako vo vyhlásení System.out.println(s1==s3);

V triede Študent neexistuje metóda rovnosti. Preto sa v triede Object volá rovná sa. True sa zobrazí iba vtedy, ak referencia objektu ukazuje na rovnaký objekt.

Rozdiel medzi rovná sa a hashCode v Java_Figure 02
Rozdiel medzi rovná sa a hashCode v Java_Figure 02

Obrázok 02: Program Java s prepísaným sa rovná

Podľa vyššie uvedeného programu je metóda rovná sa prepísaná. Objekt sa odovzdá metóde a pretypuje sa na Student. Potom sa skontrolujú hodnoty id. Ak sú hodnoty id podobné, vráti hodnotu true. Ak nie, vráti hodnotu false. ID s1 a s2 sú podobné. Vypíše sa teda pravda. ID s1 a s3 sú tiež podobné, takže sa vypíše true.

Čo je hashCode v jazyku Java?

HashCode sa používa pri hašovaní na rozhodnutie, do ktorej skupiny by mal byť objekt zaradený. Skupina objektov môže zdieľať rovnaký hashCode. Správna hašovacia funkcia dokáže rovnomerne rozdeliť objekty do rôznych skupín.

Správny hashCode môže mať nasledujúce vlastnosti. Predpokladajme, že existujú dva objekty ako obj1 a obj2. Ak je obj1.equals(obj2) pravdivé, potom obj1.hashCode() sa rovná obj2.hashCode(). Ak je obj1.equals(obj2) nepravda, nie je potrebné, aby sa obj1.hashCode() nerovnalo obj2.hashCode(). Dva nerovnaké objekty môžu mať tiež rovnaký hashCode.

Rozdiel medzi rovná sa a hashCode v Java_Figure 03
Rozdiel medzi rovná sa a hashCode v Java_Figure 03

Obrázok 03: Študentská trieda s rovnakým a hashCode

Kľúčový rozdiel medzi rovná sa a hashCode v Jave
Kľúčový rozdiel medzi rovná sa a hashCode v Jave

Obrázok 04: Hlavný program

Trieda Študent obsahuje metódy rovná sa a hashCode. Metóda rovná sa v triede Študent dostane objekt. Ak má objekt hodnotu null, vráti hodnotu false. Ak triedy objektov nie sú rovnaké, vráti hodnotu false. Hodnoty id sa kontrolujú v oboch objektoch. Ak sú podobné, vráti sa pravda. V opačnom prípade vráti hodnotu false.

V hlavnom programe sa vytvárajú objekty s1 a s2. Pri volaní s1.equals(s2) dá hodnotu true, pretože metóda equals je prepísaná a kontroluje hodnoty id dvoch objektov. Aj keď sa týkajú dvoch objektov, odpoveď je pravdivá, pretože hodnoty id s1 a s2 sú rovnaké. Keďže s1.equals(s2) je pravdivé, hashCode s1 a s2 by sa mal rovnať. Tlač hashCode s1 a s2 dáva rovnakú hodnotu. Metódu hashCode možno použiť so zbierkami, ako je HashMap.

Aký je rozdiel medzi rovná sa a hashCode v Jave?

rovná sa vs hashCode v jazyku Java

equals je metóda v jazyku Java, ktorá funguje podobne ako operátor==, ktorý má testovať identitu objektu a nie rovnosť objektu. hashCode je metóda, pomocou ktorej trieda implicitne alebo explicitne rozdeľuje údaje uložené v inštancii triedy na jednu hodnotu hash.
Použitie
Metóda sa rovná sa používa na porovnanie dvoch objektov. Metóda sa používa pri hašovaní na rozhodnutie, do ktorej skupiny by mal byť objekt zaradený.

Súhrn – rovná sa hashCode v jazyku Java

Rozdiel medzi rovná sa a hashCode v Java je ten, že rovná sa používa na porovnanie dvoch objektov, zatiaľ čo hashCode sa používa pri hašovaní na rozhodnutie, do ktorej skupiny by mal byť objekt zaradený.

Odporúča: