JavaのHashMapでは、ハッシュ値がバケットに格納されていることがわかりましたこれは高速検索に役立ちます。
取得中に、ハッシュコードがチェックされ、それに応じてバケット番号が検索されます。
バケット番号が1〜10であり、ハッシュコードから見つかったバケット番号がバケット番号5
である場合。
コントロールはどのようにバケット番号5に転送されますか?バケツ1を通ってバケット4に到達して5に達するか、それとも他のメカニズムを使用していますか?Hashmapはランダムアクセスを使用しますか?
-4
A
答えて
4
ハッシュテーブルはバケットの配列として実装されているため、配列のrandom accessインデックスを使用して、ハッシュが与えられたときに正しいバケットに到達します。
5
これはダイレクトアレイアクセスです。反復/トラバーサルはありません。しかし、それはオブジェクトの中を移動し、equals
と比較する必要があります。多分それはあなたを混乱させるでしょう。
2
だから、それは配列からランダムにアクセスいjava.util.HashMapをコード
/**
* Adds a new entry with the specified key, value and hash code to
* the specified bucket. It is the responsibility of this
* method to resize the table if appropriate.
*
* Subclass overrides this to alter the behavior of put method.
*/
void addEntry(int hash, K key, V value, int bucketIndex) {
Entry<K,V> e = table[bucketIndex];
table[bucketIndex] = new Entry<>(hash, key, value, e);
if (size++ >= threshold)
resize(2 * table.length);
}
からの抜粋。
3
ハッシュ関数は、バケットの位置を特定するために使用されます。
10個のバケットがある場合、たとえばみましょう
はのは10個のバケット、
に文字列をマッピングするために些細なハッシュ関数を書いてみましょう文字列セットのために、文字値が10個のバケットに追加し、ハッシュ化されていることを言いますFor any non empty String,
hash function f = sum of (index of characters) % 10
例:abc = 1 + 2 + 3%10 = 6.したがって、「abc」は6番目のバケットになります。xyz = 24 + 25 + 25%10 = 7.5~8。だから "xyz"は8番目のバケツに終わります。
"xyz"を捜し出すと、ハッシュ関数はここで直接バケットを見つけます。
hash functionは、ハッシュマップの作業の中心にあります。バケット 配列の各スペースを連鎖直接に、追加し、値を取得するそのうちのいくつかは、直接chaningあり、オープンこれらの方法は、その店舗に基づきなど に対処し、例をchange.Forます値をフェッチ中
0
いくつかの戦略があります。同じ場所にハッシュされたキーと値のペアを含むリンクされたリストへのポインタです。値を検索すると、与えられた値でリスト全体をスキャンしています。
関連する問題
- 1. ファイルチャネルを使用してファイルにランダムアクセスしますか?
- 2. ランダムアクセスを使用したH264のデコード
- 3. GPUはどのようにランダムアクセスを処理しますか?
- 4. ThreadLocalをHashMapのキーとして使用できますか?
- 5. xslt 2.0:HashMapを使用
- 6. Android - HashMapでupdateChildren()を使用
- 7. HashMapを使用してPrepared Statement、例外
- 8. HashMapをビルダーとして使用するには?
- 9. Expression Language(JSP)を使用してHashMapにアクセスするには
- 10. 私はHashMapを変換しますか[T、フューチャー[N]]フューチャー[HashMapの[T、N]]
- 11. HashtableとHashMapを使用する場合
- 12. カスタムキーでHashMapを使用する
- 13. HashMapを使用してイメージを設定できません
- 14. HBaseはどのようにHDFSへのランダムアクセスを可能にしますか?
- 15. なぜHashMapのキーとして文字列を使用できますか?
- 16. gzippedファイルへのランダムアクセス?
- 17. HashMapではなくAndroidのArrayMapを使用するタイミングは?
- 18. 変数がHashMapで使用された回数にアクセスしますか?
- 19. JavaでUnicodeを使用してHashMapを作成する
- 20. RxJavaを使用してHashMap値を変換する
- 21. moshiを使用してHashMapを変換する
- 22. JSTLを使用してHashMapに値を "put"する方法
- 23. HashMapを使用してパラメータを渡す方法入力
- 24. XMLを使用してHashMapを初期化する
- 25. Java8ストリームを使用したHashMapのキーを反転する
- 26. HashMapを使用し、TreeMapを降順キー値で使用して並べ替え
- 27. 変数でHashMapを使用する方法は? Java sqlite
- 28. HashMap、Listなどを使用する必要がありますか?
- 29. ランダムアクセスは、ユーザーの拡張グラフAPIで
- 30. EJBメソッドは別のHashMapを返しますか?
http://en.wikipedia.org/wiki/Hashmap ... –
...またはデータ構造に関する優れた教科書を読んでください。 –
あなたは宿題をそのようにマークする必要があります。 – Viruzzo