Junior
Aký je rozdiel medzi metódami equals a hashCode v Jave?
sobes.tech AI
Odpoveď od AI
Metóda equals sa používa na porovnanie objektov za rovnosť ich obsahu, zatiaľ čo hashCode vracia celé číslo, ktoré predstavuje hash kód objektu.
Hlavné rozdiely:
- Účel:
equalsna určenie logickej rovnosti,hashCodena generovanie hash kódu (zvyčajne na použitie v hashových štruktúrach dát). - Výsledok:
equalsvraciaboolean(true alebo false),hashCodevraciaint. - Zmluva: Ak sú dva objekty rovnaké podľa
equals, ichhashCodemusia byť rovnaké. Opak nie je pravdivý: objekty s rovnakýmhashCodemôžu mať odlišný obsah (kolízia). - Použitie:
equalssa používa na porovnávanie objektov vo dvojiciach.hashCodesa používa v hashových kolekciách (napríkladHashSet,HashMap) na rýchle vyhľadávanie objektov.
Príklad:
// Príklad triedy
class MyObject {
private int id;
private String name;
public MyObject(int id, String name) {
this.id = id;
this.name = name;
}
// Prepisovanie equals
@Override
public boolean equals(Object o) {
if (this == o) return true; // Kontrola identity
if (o == null || getClass() != o.getClass()) return false; // Kontrola typu a null
MyObject myObject = (MyObject) o; // Typová konverzia
return id == myObject.id && Objects.equals(name, myObject.name); // Porovnanie polí
}
// Prepisovanie hashCode
@Override
public int hashCode() {
return Objects.hash(id, name); // Generovanie hash kódu na základe polí
}
}
Je dôležité prepisovať obe metódy (equals a hashCode) spoločne, ak je prepisovaná jedna z nich, aby sa neporušil kontrakt a zabezpečila správna funkcia kolekcií.