VをKという名前の単一の属性とそのゲッターとセッターであるクラスとします。マップキーは不変であることを想定しているので、マップキーとして使用されるオブジェクトの変更
V v = new V();
v.setK("a");
HashMap<K,V> map = new HashMap<K,V>();
map.put(v.getk(),v);
v.setK("b");
私の知る限りでは、これが問題のいくつかの種類を起こす必要があります。私がしなければ起こることになっているもの
。ここで何が起こるでしょうか?
編集:キーは文字列ではなく、下記のように変更可能なオブジェクトであると考えてください。
問題があるシナリオは、あなたがK [ey]をオブジェクト化するときに複雑なオブジェクトです。たとえば、属性Aを含み、KはA値に基づいて独自のhashCodeを計算します。その場合、Kを地図のキーとして使用した後にAが変更された場合、Map契約に違反します。 JavaDocからの引用:変更可能なオブジェクトがマップキーとして使用されている場合は、十分な注意が必要です。オブジェクトがマップ内のキーである間に等価比較に影響するようにオブジェクトの値が変更された場合、マップの動作は指定されません。 –
もちろん、私の悪い。私はいつもこの事件を意味していました。文字列をキーとして使うのは悪い例でした。私は質問を編集しています、ありがとう。 – bluehallu