Junior
Na čo sa používa metóda hashCode?
sobes.tech AI
Odpoveď od AI
Metóda hashCode() v Jave a Kotlin sa používa na generovanie celého čísla, ktoré predstavuje objekt. Zohráva kľúčovú úlohu pri práci s kolekciami založenými na hash tabuľkách (HashMap, HashSet, Hashtable), kde sa používa na rýchle určenie "koša" (bucket), v ktorom by mal byť alebo hľadaný objekt. Kľúčové body:
- Zabezpečenie kontraktu
equalsahashCode: Ak sú dva objekty považované za "rovné" metódouequals(), ichhashCode()by mal vracať rovnakú hodnotu. Opak je nepravdivý: odlišné objekty môžu mať rovnaký hash kód (kolízia). - Rýchle vyhľadávanie/vkladanie: Hash kód sa používa ako index pre rýchly prístup k prvkom v hash kolekciách. Bez neho by bolo vyhľadávanie v veľkých kolekciách oveľa pomalšie.
- Nepovinné: Ak sa objekt neplánuje používať ako kľúč v hash kolekciách, implementácia
hashCode()podľa predvoleného (zvyčajne založená na adrese v pamäti) môže byť dostatočná. Avšak, ak sa prepisujeequals(), je potrebné prepísať ajhashCode()na dodržanie kontraktu. - Stabilita: Hodnota
hashCode()pre nemenný objekt by mala zostať nezmenená počas jeho života. Pre meniteľné objekty sa hash kód môže meniť, ale to si vyžaduje opatrnosť pri používaní v hash kolekciách.
Príklad základnej implementácie v Kotlin:
data class User(val id: Long, val name: String)
// Pre dátové triedy sa `hashCode()` a `equals()` generujú automaticky
Príklad manuálnej implementácie v Jave (dôležité je správne kombinovať hodnoty):
class User {
private final long id;
private final String name;
public User(long id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id == user.id &&
Objects.equals(name, user.name); // Používame Objects.equals na zabránenie NullPointerException
}
@Override
public int hashCode() {
return Objects.hash(id, name); // Používame Objects.hash na kombinovanie hash kódov
}
}