2

ConcurrentHashMap複数のスレッドが同時に読み取りと書き込みを行うため、データ構造としてa を使用して います。しかし、クライアント コードもかなり頻繁に反復する必要があることがわかりました。そこで、より優れた反復パフォーマンスを提供する LinkedHashMap クラスを調べたところ、Java doc でこのセクションが見つかりました。

リンクされたハッシュ マップには、そのパフォーマンスに影響を与える 2 つのパラメーターがあります。それは、初期容量と負荷係数です。それらは、HashMap とまったく同じように定義されています。ただし、このクラスの反復時間は容量の影響を受けないため、初期容量に過度に高い値を選択した場合のペナルティは、HashMap よりもこのクラスの方が深刻ではないことに注意してください。

したがって、反復は容量に依存しません。LinkedHashMap または HashMap の一般的な初期容量に依存する他の操作は何ですか?また、最近の JDK バージョンには、LinkedHashMap の同時バージョンはありますか?

4

2 に答える 2

0

HashMap javadoc を見ると、次のように記載されています。

容量はハッシュ テーブル内のバケットの数であり、初期容量は単にハッシュ テーブルが作成された時点の容量です。

それも

ハッシュ テーブルのエントリ数が負荷係数と現在の容量の積を超えると、ハッシュ テーブルが再ハッシュされ (つまり、内部データ構造が再構築され)、ハッシュ テーブルのバケット数が約 2 倍になります。

LinkedHashMap は、HashTable に基づく実装であり、順序を維持するためにリンク リストを使用します。初期容量は反復のパフォーマンスには影響しません。容量に依存する唯一の操作は、テーブルの再ハッシュを引き起こす可能性のある挿入操作だと思います。地図

于 2012-09-06T13:07:54.437 に答える
0

他の操作が LinkedHashMap の初期容量に依存する反復を除いて

それが述べているように、容量は反復にとって重要ではありません。初期容量に大きな違いが生じることはめったになく、負荷率が適切であれば、容量は必要に応じて増加します。

また、最近のJDKバージョンにはLinkedHashMapの同時バージョンがありますか

ConcurrentHashMap が最も近いです。同時アクセスが必要な場合は、これを使用してください。

于 2012-09-06T12:12:44.917 に答える