Middle
Co vrátí metoda HasMap.get(), pokud metody equals a hashCode nejsou přepsány?
sobes.tech AI
Odpověď od AI
null bude vráceno, pokud klíč, podle kterého se hledá, není přesně ten samý objekt (má stejnou referenci), který byl použit při vložení.
Důvodem je, že HashMap používá kombinaci hashCode() a equals() k určení "rovnosti" klíčů. Pokud tyto metody nejsou přepsány, používají se implementace z Object.
Object.hashCode()obvykle vrací hodnotu založenou na adrese objektu v paměti, tedy unikátní pro každý případ.Object.equals()jednoduše kontroluje referenční rovnost (this == obj).
Aby HashMap.get() našel prvek s použitím výchozích equals a hashCode, musí být splněny obě podmínky:
- Hash kódy (
Object.hashCode()) musí být stejné, což je velmi nepravděpodobné pro různé objekty. - Objekty musí být referenčně stejné (
Object.equals()), tj. musí jít o tu samou instanci.
Pokud vložíte objekt do HashMap a poté se pokusíte jej získat pomocí jiného objektu se stejnými hodnotami polí (ale ne stejnou instancí), hashCode a equals je výchozími metodami budou považovat za odlišné, a get() vrátí null.