[解決済み】Java HashMapは、同じハッシュコードを持つ異なるオブジェクトをどのように処理するのですか?
質問
私の理解では、そうだと思います。
- 2つのオブジェクトが同じハッシュコードを持つことは、完全に合法です。
- もし2つのオブジェクトが(equals()メソッドを使って)等しければ、それらは同じハッシュコードを持っていることになります。
- 2つのオブジェクトが等しくない場合、それらは同じハッシュコードを持つことはできません。
私は正しいですか?
さて、もしそうだとしたら、次のような疑問があります。
その
HashMap
は、内部でオブジェクトのハッシュコードを使用しています。もし二つのオブジェクトが同じハッシュコードを持つことができるのであれば、どのようにして
HashMap
どのキーを使っているか追跡できますか?
がどのようなものかを説明できる人はいますか?
HashMap
は、内部でオブジェクトのハッシュコードを使っているのですか?
どのように解決するのですか?
ハッシュマップは次のような仕組みになっています(少し簡略化していますが、基本的な仕組みは説明できます)。
バケツにはKey-Valueのペアが格納されます。各バケットには一意の番号があり、これがバケットを識別するためのものです。Key-Valueペアをマップに入れると、ハッシュマップはキーのハッシュコードを調べ、識別子がキーのハッシュコードであるバケットにそのペアを格納します。例えば キーのハッシュコードは235 -> ペアはバケット番号235に格納されます。(1つのバケツに複数のKey-Valueペアを格納することができることに注意してください)。
ハッシュマップにキーを与えて値を探す場合、まず与えたキーのハッシュコードを調べます。次に、ハッシュマップは対応するバケツを調べ、あなたが与えたキーとバケツ内のすべてのペアのキーを
equals()
.
キーのハッシュコードによって、ハッシュマップはどのバケツを探せばいいのかがすぐにわかるので、そのバケツにあるものに対してのみテストを行えばいいのです。
上記のような仕組みを見ると、「Security」(セキュリティ)のために、どのような要件が
hashCode()
と
equals()
メソッドを使用します。
-
2つのキーが同じである場合(
equals()
は以下を返します。true
を比較した場合)、そのhashCode()
メソッドは同じ数値を返さなければなりません。もしキーがこれに違反すると、等しいキーが異なるバケットに格納され、ハッシュマップは(同じバケットを探そうとするため)キーと値のペアを見つけることができなくなるかもしれません。 -
2つのキーが異なる場合、そのハッシュコードが同じかどうかは問題ではありません。ハッシュコードが同じなら同じバケツに格納され、この場合、ハッシュマップは
equals()
で見分けることができます。
関連
-
[解決済み] この配列の中の数字を入れ替えるには、何が足りないのでしょうか?ジャバ
-
[解決済み] javacが「using unchecked or unsafe operations」という警告を出す原因は何ですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] Eclipseにプロジェクトをインポートした後に「Must Override a Superclass Method」エラーが発生する。
-
[解決済み] JavaでMD5ハッシュを生成するにはどうすればよいですか?
-
[解決済み] 2つのJavaScriptオブジェクトの等質性を判断する方法は?
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】ArrayListのcontains()メソッドは、どのようにオブジェクトを評価するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] java.sql.SQLException: ORA-00933: SQL コマンドが正しく終了していません。
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]
-
[解決済み] SubclipseとJavaHLのインストールで頭を悩ます
-
[解決済み] Javaでdoubleをfloatに変換する
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?