0

8000 のキーと値のペアがあります。ハッシュ速度は O(1) と読みましたが、キーが衝突すると O(n) になり、n は log(項目番号) になります。私の概念が間違っている場合は修正してください。

次に、複数のテーブルを使用する場合、たとえば 1 ~ 3000 を hashtable1 に、3001 ~ 6000 を hashtable1 に配置すると、パフォーマンスは 2*O(1) になる可能性が高くなるはずです。また、テーブル 1、2 などの最適なサイズを決定するにはどうすればよいですか?

また、ハッシュマップにアクセスするためにマルチスレッドを使用しない場合、ハッシュマップを使用する方が良いという投稿を読みましたか? それは本当ですか?

4

2 に答える 2

1

衝突の確率は、HashTable の要素数とサイズの比率のみに依存します。

初期値を指定できます。指定しない場合、Java がこれを適切に処理します。

はい、同期されたデータ構造の余分な負担がないため、同時アクセスがない場合は HashMap を使用してください。

于 2013-10-14T16:58:39.517 に答える
0

あなたは最初の文で自分自身の質問に答えました: I read that hash speed is O(1), but with collision on key .

キーであるオブジェクトが作成したクラスのものである場合、 のhashCode()計算方法を完全に制御できます。単一のマップを使用して実装hashCode()し、衝突がほとんど起こらないようにします。

の動作方法を制御しない場合hashCode()でも、キー オブジェクトをラップし、それらの独自のハッシュ コードを計算するクラスを作成できます。その結果は、複数のマップを使用するものよりも読みやすくなります。

複数マップのアプローチはハックであり、ハッシュの衝突によるパフォーマンスの問題はほとんどの場合、I/O を最適化するほとんどのアプリケーションでは、この種のマイクロ最適化よりもはるかに大きな利益をもたらします。したがって、通常は読みやすさを目指した方がよいでしょう。

于 2013-10-14T18:12:46.513 に答える