Javaの並行プログラミング・ノート(x)は - HashMapのとConcurrentHashMapの
HashMapのパラメータ
彼のパフォーマンスに影響を与える2つのパラメータがあります。
- 初期容量(デフォルトは16です)
- 荷重係数(デフォルトは0.75です)
HashMapをアドレッシング
私たちは、それが最初のハッシュマップのキーが挿入位置指標の結果として、一定のルール算出したハッシュ値と我々の配列を法、組織の数の長さに応じて算出されます、私たちが読みたいデータやデータを挿入する必要があります。
計算では、コストは、このように、アレイの必要な長さは、N 2のパワーなければならないモジュロ変位ハッシュマップのコストよりもはるかに高く、この場合には、(N-1)のハッシュ値の鍵となる乗2のと動作は、それが2のn乗の整数を渡す必要があり、ユーザが必要としない、我々の結果のモジュロ演算は、同じ、hshMap初期化時間であるが、入ってくる値に応じて、満足2を計算しますn乗の容量。
理由のハッシュマップ不安
ハッシュが実施すると、サイズ変更、および無限ループになりやすいです
そして、簡単に高速フェールイテレータを使用する場合に発生します
ファスト失敗します。
フェイルファスト機構のjavaつのエラー機構のコレクション(コレクション)。複数のスレッドがコンテンツの同じセット上で動作している場合、それはフェイルファストイベントを発生させることができます。たとえば、次のセットは、他のスレッドによって変更された場合、スレッドは収集プロセスを横断するイテレータ、コンテンツ場合、次に、スレッドAは、コレクションにアクセスし、例外がConcurrentModificationExceptionをスローするフェイルファストイベントを生成します。
ConcurrentHashMapの
ConcurrentHashMapとHashMapの差は、最外層の底部が大きなアレイではなく、セグメントのアレイは、各セグメントはハッシュマップのリストと同様の配列を含んでいることです。セグメントは、それが簡単に、配列のセグメントがロックされていることができ、ReetrentLockから継承されました。
セグメント:フラグメンテーション