拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
Map の原理を確認することをお勧めします。Map が値を保存するときは、オブジェクトのアドレスではなく、オブジェクトのハッシュコードを使用します。まず、マップにキーとして p1 を入力します。このとき、p1のハッシュコードが変更されているため、再度保存したところ、mapは別のキーと判断して保存しました。
以下は HashMap.put の内部実装です
p1.setAge(5) の後、p1 の hashCode が変更され、上記の関数の hash(key) が変更されます。キーは同じオブジェクトですが、HashMap はそれを新しいキーとして保存します。
効率上の理由から、このシナリオはサポートされていません。これは HashMap の落とし穴とも言えます。
Map の原理を確認することをお勧めします。
Map が値を保存するときは、オブジェクトのアドレスではなく、オブジェクトのハッシュコードを使用します。
まず、マップにキーとして p1 を入力します。このとき、p1のハッシュコードが変更されているため、再度保存したところ、mapは別のキーと判断して保存しました。
以下は HashMap.put の内部実装です
リーリーp1.setAge(5) の後、p1 の hashCode が変更され、上記の関数の hash(key) が変更されます。キーは同じオブジェクトですが、HashMap はそれを新しいキーとして保存します。
効率上の理由から、このシナリオはサポートされていません。これは HashMap の落とし穴とも言えます。