Sobes.tech
Junior — Middle

Come influisce la modifica della chiave sulla struttura e sul comportamento di HashMap in Java?

sobes.tech AI

Risposta dell'AI

In HashMap, le chiavi vengono utilizzate per calcolare il codice hash e determinare la posizione dell'elemento nella struttura interna (bucket). Se l'oggetto usato come chiave viene modificato in modo che cambi il suo hash o il risultato del metodo equals(), ciò interromperà il funzionamento di HashMap.

Perché?

  • Quando si aggiunge un elemento, la chiave viene hashata e l'elemento viene inserito in un bucket specifico.
  • Quando si cerca un elemento con una chiave, HashMap calcola l'hash e cerca nel bucket corrispondente.

Se la chiave cambia dopo l'aggiunta, durante la ricerca con la nuova chiave verrà calcolato un hash diverso e l'elemento non verrà trovato — si "perderà" nella mappa.

Per questo motivo, le chiavi in HashMap devono essere immutabili o non cambiare mentre sono usate come chiavi.

Esempio del problema:

class Key {
    int id;
    Key(int id) { this.id = id; }
    public int hashCode() { return id; }
    public boolean equals(Object o) { return o instanceof Key && ((Key)o).id == id; }
}

Key key = new Key(1);
HashMap<Key, String> map = new HashMap<>();
map.put(key, "valore");

key.id = 2; // chiave modificata

System.out.println(map.get(key)); // null, perché la chiave "si è persa"