HashMapデータ構造は、キーのハッシュコードに基づいてバケット間でキーを分散します。ほとんどの場合、ハッシュアルゴリズムが非常に優れている場合、すべてのキーが異なるバケットに分散されます。しかし、すべてのキーが同じハッシュコードを返す場合はどうなるでしょうか。挿入/取得操作はO(n)の順序になります。
独自のHashMapを実装している場合、バケット間で均等に分散するためにどのように(または何をすべきか)しますか?方法さえありますか?
HashMapデータ構造は、キーのハッシュコードに基づいてバケット間でキーを分散します。ほとんどの場合、ハッシュアルゴリズムが非常に優れている場合、すべてのキーが異なるバケットに分散されます。しかし、すべてのキーが同じハッシュコードを返す場合はどうなるでしょうか。挿入/取得操作はO(n)の順序になります。
独自のHashMapを実装している場合、バケット間で均等に分散するためにどのように(または何をすべきか)しますか?方法さえありますか?
しかし、すべてのキーが同じハッシュコードを返す場合はどうなるでしょうか。
その後、あなたはゲームに負けました、そしてあなたがそれについてできることは何もありません。
ただし、データ構造は実際には気にしないので心配しないでください。データ構造のユーザーは気にするかもしれませんがhashCode
、最初のケースでは病理学的実装の責任者です。
理論的には、悪意を持って選択された入力値でさえ、ユニバーサルハッシュを使用して合理的に均等に分散できますが、Javaでは、それは実際にはオプションではありません。
キーに対して DES などを実行して、ハッシュを生成します。まともな暗号化アルゴリズムは、結果がランダムに見えることを保証します.