Il est recommandé de jeter un œil au principe de Map Lorsque la carte stocke des valeurs, elle n'utilise pas l'adresse de l'objet, mais le hashcode de l'objet Vous mettez d'abord p1 comme clé dans la carte, puis Lorsque la valeur de p1 est modifiée, le hashcode de p1 a changé Lorsqu'il est à nouveau stocké, la carte pense qu'il s'agit d'une clé différente, elle l'enregistre donc.
Ce qui suit est l'implémentation interne de HashMap.put
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
Après p1.setAge(5), le hashCode de p1 change et le hash(key) dans la fonction ci-dessus change Bien que la clé soit le même objet, HashMap la stocke toujours comme une nouvelle clé.
Pour des raisons d'efficacité, ce scénario n'est pas pris en charge. Cela peut être considéré comme un écueil de HashMap.
Il est recommandé de jeter un œil au principe de Map
Lorsque la carte stocke des valeurs, elle n'utilise pas l'adresse de l'objet, mais le hashcode de l'objet
Vous mettez d'abord p1 comme clé dans la carte,
puis Lorsque la valeur de p1 est modifiée, le hashcode de p1 a changé Lorsqu'il est à nouveau stocké, la carte pense qu'il s'agit d'une clé différente, elle l'enregistre donc.
Ce qui suit est l'implémentation interne de HashMap.put
Après p1.setAge(5), le hashCode de p1 change et le hash(key) dans la fonction ci-dessus change Bien que la clé soit le même objet, HashMap la stocke toujours comme une nouvelle clé.
Pour des raisons d'efficacité, ce scénario n'est pas pris en charge. Cela peut être considéré comme un écueil de HashMap.