2012-03-10 10 views
1

人物オブジェクトに関する信用履歴情報をシミュレーションに保存します。Javaで変更可能なオブジェクトの詳細を追跡するにはどうすればいいですか

私はHashMap<Person, CreditHistory>を使いたかったのですが、java APIは、私のプログラムで信用履歴などの変更可能なオブジェクトを追跡するためにHashMapsを使用することには注意が必要だと言います。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/HashMap.html

このためのより良い構造はありますか?

+2

時には奇妙なことを言うかもしれません...あなたがキーを変更する予定がない限り、それはおそらくあまりありません。値は自由に変更できます。 – Jon

+0

私は信用情報を私に送るだけでそれを把握します。 – nsfyn55

答えて

5

注意事項はhashCode()またはequals()の動作に影響を与えるキーについて何かを変更すると、ハッシュマッピングが中断され、再度キーを見つけることができなくなります。値については、自由に何でもできます。値を変更すると地図のセマンティクスが変更されると、あなた次第です。

+0

私はPersonオブジェクトを変更する必要があります。人のString uniqueIDを返すために、Object()からhashCode()関数をオーバーライドするだけですか?または、代わりに、私は文字列uniqueIDをマップのキーとして使用することができます – bernie2436

+0

正しい呼び出しのようにキーとして 'uniqueId'を使用します。 –

+0

一般に、複雑な可変オブジェクトをキーとして使用するのは良い考えではありません。 _value_の一意の識別子である不変のものを使用します。あなたの場合、人の 'uniqueID'が変更できない場合、それは良い候補です。 –

1

Personオブジェクトを頻繁に変更する予定がない限り、大丈夫です。

APIは、変更可能なオブジェクトをキーとして使用することを慎重にすると言います。これは、キーが変更されたときに厳密なロジックが失敗する可能性があるためです。あなたがそれを正しくプログラムすれば、あなたは大丈夫でしょう。

CreditHistoryオブジェクトを変更するだけの場合は、これが最適な構造であり、使用するのが最も簡単です(私の意見では)。

関連する問題