[解決済み] HashTableは衝突をどのように処理するのですか?
質問
学位論文の授業で
HashTable
は、新しい Key エントリが他のエントリと衝突した場合、「次に利用可能な」バケツに配置するそうです。
はどのように
HashTable
を呼び出したときにこの衝突が発生した場合でも、正しい値を返すのでしょうか?
私が想定しているのは
Keys
は
String
の型であり
hashCode()
はJavaと言ったもので生成されたデフォルトを返します。
もし私が独自のハッシュ関数を実装し、それをルックアップテーブルの一部として使うなら (すなわち
HashMap
または
Dictionary
など)、衝突に対処するための戦略はどのようなものがあるでしょうか?
素数に関するメモも見たことがありますよ。Google検索ではあまりはっきりしない情報です。
どうやって解くのですか?
ハッシュテーブルは、2つの方法のいずれかで衝突に対処しています。
オプション1: 各バケットに、そのバケットにハッシュ化された要素のリンクリストを持たせることで、そのバケットにハッシュ化された要素が含まれるようになります。これは、悪いハッシュ関数がハッシュテーブルのルックアップを非常に遅くしてしまう理由です。
オプション 2: ハッシュテーブルのエントリがすべて一杯になった場合、ハッシュテーブルは持っているバケットの数を増やし、テーブル内のすべての要素を再分配することができます。ハッシュ関数は整数を返すので、ハッシュテーブルはハッシュ関数の結果を受け取り、それをテーブルのサイズに対して修正する必要があります。そのため、サイズを大きくすると、ハッシュ関数が再計算されてモジュロ計算が行われ、運が良ければオブジェクトが別のバケツに送られるかもしれません。
Java では、ハッシュ テーブルの実装でオプション 1 と 2 の両方を使用しています。
関連
-
FindBugの使用概要
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] ハッシュマップのキーを指定して、値を更新するには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
が 'X-Frame-Options' を 'sameorigin' に設定したため、フレーム内に存在する。
-
FindBugの使用概要
-
Javaがテキストファイルを読み込む
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
Java の double データ型における 0.0 と -0.0 の問題
-
java 365*1000*60*60*24 計算問題
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。