この質問のタイトルは誤解を招く可能性があります。マップキーとして使用されるオブジェクトを変更する場合のように、マップキーを変更することはありません。と言うと、キーと値の2つの独立した値を集約するマップエントリmap.put(x, y)
を作成します。キーの発信元がマップに表示されていない場合、それは2つのオブジェクトにすぎません。したがって、マップエントリを作成し、その後vの状態を変更しただけです。これがマップエントリのキー「a」に影響を与える可能性はありません。一方、自分で作成したオブジェクトKがある場合は、次のようになります。("a", v)
public class K {
private String s;
public K(String s) { this.s = s; }
public void setS(String s) { this.s = s; }
public boolean equals(Object o) { return ((K)o).s.equals(this.s); }
public int hashCode() { return s.hashCode(); }
}
そして今、あなたはします
final K k = new K("a");
map.put(k, v);
k.setS("b");
map.get(k);
次に、問題に直面します。マップキーとして使用されるオブジェクトを変更しました。