ハッシュマップでは、提供されたキーのハッシュコードを使用して、値をハッシュテーブルに配置します。ハッシュセットでは、オブジェクトハッシュコードを使用して、基になるハッシュテーブルに値を配置します。つまり、ハッシュマップの利点は、キーとして何を使用するかを柔軟に決定できるため、このような優れた処理を実行できることです。
Map<String,Player> players = new HashMap<String,Player>();
これにより、プレーヤー名などの文字列をプレーヤー自体にマップできます。
私の質問は、キーのハッシュコードが変更されたときにルックアップがどうなるかということです。
これは、キーが変更されることを期待も望まないので、ハッシュマップにとってそれほど大きな懸念事項ではないと思います。前の例では、プレーヤーの名前が変更された場合、そのプレーヤーではなくなります。ただし、キーを使用してプレーヤーを検索することはできますが、名前ではない他のフィールドを変更すると、将来の検索が機能します。
ただし、ハッシュセットでは、オブジェクト全体のハッシュコードがアイテムの配置に使用されるため、誰かがオブジェクトをわずかに変更した場合、オブジェクト全体のハッシュコードに依存するため、そのオブジェクトの将来のルックアップはハッシュテーブル内の同じ位置に解決されなくなります。これは、データがハッシュセットに入ると、変更してはならないことを意味しますか?または、再ハッシュする必要がありますか?それとも自動的に行われますか?何が起こっている?