Sobes.tech
Junior — Middle

Aké potenciálne problémy môžu nastať, ak v HashMap použijete ako kľúč ne-reťazcový typ dát?

sobes.tech AI

Odpoveď od AI

Ak v HashMap používate ako kľúč dátový typ, ktorý nie je reťazec, môžu nastať nasledujúce problémy:

  • Nesprávna implementácia metód hashCode() a equals(): Pre správne fungovanie HashMap musia tieto metódy správne prepísať. Inak môžu nastať kolízie alebo ťažkosti pri nájdení správneho prvku.

  • Zmena kľúča: Ak sa kľúč zmení po jeho vložení do HashMap (napríklad, ak sa zmení pole, ktoré sa používa pri výpočte hash), prvok sa môže stať nedostupným pri vyhľadávaní, pretože hash sa zmení.

  • Výkon: Zložité objekty môžu mať nákladné výpočty hashCode, čo spomaľuje operácie vkladania a vyhľadávania.

  • Problémy s serializáciou a kompatibilitou: Ak sú kľúče zložité objekty, ich serializácia a použitie v rôznych kontextoch môže spôsobovať ťažkosti.

Príklad správneho kľúča s prepísanými hashCode a equals:

class Key {
    private int id;
    private String name;

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Key key = (Key) o;
        return id == key.id && Objects.equals(name, key.name);
    }
}