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,
HashMapcalcola 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"