Sobes.tech
Junior — Middle

Ce probleme potențiale pot apărea dacă se folosește un tip de date non-string ca și cheie într-un HashMap?

sobes.tech AI

Răspuns de la AI

Dacă în HashMap se utilizează un tip de date care nu este șir de caractere ca cheie, pot apărea următoarele probleme:

  • Implementarea incorectă a metodelor hashCode() și equals(): Pentru ca HashMap să funcționeze corect, cheile trebuie să suprascrie aceste metode în mod corespunzător. În caz contrar, pot apărea coliziuni sau dificultăți în găsirea elementului dorit.

  • Modificarea cheii: Dacă cheia se modifică după ce a fost introdusă în HashMap (de exemplu, dacă un câmp utilizat în calculul hash-ului se schimbă), elementul poate deveni inaccesibil în timpul căutării, deoarece hash-ul se va schimba.

  • Performanță: Obiectele complexe pot avea calcule de hash costisitoare, ceea ce încetinește operațiile de inserare și căutare.

  • Probleme cu serializarea și compatibilitatea: Dacă cheile sunt obiecte complexe, serializarea și utilizarea lor în diferite contexte pot crea dificultăți.

Exemplu de cheie corectă cu hashCode și equals suprascrise:

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);
    }
}