[解決済み] Java HashMapの衝突解決
質問
Java
HashMap
使用
put
メソッドを使用して、K/V ペアを
HashMap
.
例えば、私が
put
メソッドを使って、今は
HashMap<Integer, Integer>
には1つのエントリがあり
key
を10とし
value
を17とする。
この中に10,20を挿入すると
HashMap
を挿入すると、同じキー10であるために衝突して、前のエントリがこのエントリに置き換えられるだけです。
キーが衝突した場合
HashMap
は古いK/Vのペアを新しいK/Vのペアに置き換えます。
そこで私の疑問は、いつ
HashMap
はどのような場合に使用するのでしょうか?
を形成しなかった理由
linkedlist
を形成しなかったのでしょうか?
どのように解決するのですか?
ペアを挿入する場合
(10, 17)
となり、次に
(10, 20)
を実行する場合、技術的には衝突は起こりません。与えられたキーに対して、古い値を新しい値で置き換えているだけです。
10
の新しい値に置き換えているだけです (どちらの場合も 10 は 10 と等しく、また 10 のハッシュコードは常に 10 であるため)。
衝突は、複数のキーが同じバケツにハッシュされたときに起こります。その場合、それらのキーを区別できるようにする必要があります。連鎖的衝突解決は、このために使われる技術の一つです。
例として、2つの文字列
"abra ka dabra"
と
"wave my wand"
は、ハッシュコード
100
と
200
にそれぞれ格納されます。配列の総サイズが10だとすると、どちらも同じバケツに入ることになります(
100 % 10
と
200 % 10
). チェインすることで、いつでも
map.get( "abra ka dabra" );
を実行するたびに、キーに関連付けられた正しい値が得られるようになります。Javaでのハッシュマップの場合、これは
equals
メソッドによって行われます。
関連
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
配列定数は初期化子でのみ使用可能です。
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] ハッシュマップのキーを指定して、値を更新するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
型に解決できない エラー解決
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
無効な文字定数
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
FindBugの使用概要
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。
-
java 365*1000*60*60*24 計算問題