ハッシュマップではバケットとハッシュコードを使用していますが、そうではないことを理解しています。私の経験から、Javaのハッシュコードは小さくはありませんが、通常はかなり大きな数なので、内部的には索引付けされていないと想定しています。ハッシュコードの品質が悪くてバケット長とバケット量がほぼ同じにならない限り、ハッシュマップは名前 - >値ペアのリストより高速になりますか?ハッシュマップの高速化
-1
A
答えて
1
ハッシュマップは、ハッシュ関数を使用して要素を「バケット」にマッピングすることで機能します。誰かが要素を挿入しようとすると、ハッシュコードが計算され、要素が挿入されるべきバケットインデックスを得るために、モジュラス演算がハッシュコードに適用されます(これが問題ではない理由ですハッシュコードの大きさ)。たとえば、4つのバケットがあり、ハッシュコードが40の場合、40 mod 4が0であるため、バケット0に挿入されます。
2つの要素が同じバケットにマップされると、その要素は同じバケットの下のリストに格納されます。
要素を取得しようとすると、キーはハッシュ関数を使用して再度マップされます。バケットに要素のリストが含まれている場合、どの要素が正しいかを識別するためにequals()関数が使用されます(これがequals()とhashcode()を実装してカスタムオブジェクトをハッシュマップに挿入する必要がある理由です) )。
要素を検索し、ハッシュマップにバケットのリストがない場合、コストはO(1)です。最悪の場合は、バケットが1つしかなく、要素の取得がリストO(N)での検索と同じになるすべての要素を含むリストです。
2
私はJavaの実装を見て、それがビット単位でモジュラスに似ていることを発見しました。これは、配列のサイズを小さくする意味があります。これにより、HashMapsを素敵にするO(1)アクセスが可能になります。
関連する問題
- 1. 高速化は
- 2. 高速化ギャザー
- 3. 高速化R
- 4. マトリックスフォーマットの高速化
- 5. ポストスクリプトイメージプリントの高速化
- 6. JAXBの高速化
- 7. 高速最適化
- 8. SQL - 高速化パフォーマンス
- 9. FTPClient Javaの高速化ダウンロード
- 10. XMLパーサーの高速化
- 11. ループの高速化R
- 12. VBAコードの高速化
- 13. forループの高速化R
- 14. 高速化罪()のx64
- 15. C++の高速化アルゴリズム
- 16. openmpリダクションループの高速化
- 17. JSONオブジェクトを高速化
- 18. Excelオートフィルタを高速化
- 19. mysql:joinで高速グループ化
- 20. データベースを高速化する
- 21. GHCでコンパイルを高速化
- 22. sqlFetch()を高速化する
- 23. Java:コードを高速化
- 24. 高速化3Dアレイ乗算
- 25. Googleキャッシュを高速化
- 26. コアデータフェッチを高速化する
- 27. UIPageViewControllerを高速化する
- 28. SQL Server高速化クエリ
- 29. VBA(Excel)でデータを高速化する高速方法
- 30. 構造化NumPy配列を高速化
ハッシュマップは、キーのハッシュコードを使用して、エントリが格納されているバケットに直接アクセスします。これはO(1)アクセスです。同一または類似のハッシュコードのために複数の要素がそのバケット内にある場合は、さらにいくつかのチェックがありますが、リストを繰り返して要素を検索するよりもまだ高速です。 – dunni
また、https://www.javacodegeeks.com/2014/03/how-hashmap-works-in-java.html – dunni
@dunniしかし、ハッシュコードがインデックスされたメモリに多くのメモリを浪費する大きな数配列、どのようにO(1)ですか? – JavaProphet