ConcurrentHashMap クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。
[Android.Runtime.Register("java/util/concurrent/ConcurrentHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class ConcurrentHashMap : Java.Util.AbstractMap, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Util.Concurrent.IConcurrentMap
[<Android.Runtime.Register("java/util/concurrent/ConcurrentHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type ConcurrentHashMap = class
inherit AbstractMap
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface IConcurrentMap
interface IMap
- 継承
- 属性
- 実装
注釈
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 このクラスは、と同じ機能仕様 java.util.Hashtable
に従い、の各メソッドに対応するメソッドの Hashtable
バージョンが含まれています。 ただし、すべての操作がスレッド セーフであっても、取得操作<ではロックは必要ありません<。>また、><すべてのアクセスを妨げる方法でテーブル全体をロックすることはサポートされていません><。> このクラスは、スレッド セーフに依存するが、同期の詳細には依存しないプログラムで完全に相互運用できます Hashtable
。
取得操作 (含む get
) は一般にブロックされないため、更新操作 (含む put
) と remove
重複する可能性があります。 取得は、その発症時に保持されている最後<に完了した< em>/em> 更新操作の結果を反映します。 (より正式には、特定のキーの更新操作は、更新された値を報告する任意の (null 以外の) 取得に対して em>の発生前</em> 関係を持ちます<)。 などのputAll
clear
集計操作の場合、同時取得には、一部のエントリの挿入または削除のみが反映される場合があります。 同様に、反復子、分割子、列挙型は、反復子/列挙の作成時点または作成後のハッシュ テーブルの状態を反映する要素を返します。 彼らは/em>>スローjava.util.ConcurrentModificationException ConcurrentModificationException
しません<<. ただし、反復子は、一度に 1 つのスレッドでのみ使用されるように設計されています。 を含むsize
isEmpty
containsValue
集計状態メソッドの結果は、通常、マップが他のスレッドで同時に更新されない場合にのみ役立つことに注意してください。 それ以外の場合、これらのメソッドの結果には、監視または推定の目的には適しているが、プログラム制御には適していない一時的な状態が反映されます。
競合が多すぎる場合 (つまり、テーブルサイズと同じスロット剰余に分類されるキー) が多すぎると、テーブルは動的に拡張されます。マッピングごとに約 2 つのビンを維持すると予想される平均効果 (サイズ変更のための 0.75 負荷係数のしきい値に対応)。 マッピングが追加および削除されると、この平均に大きな差異が発生する可能性がありますが、全体的に、これはハッシュ テーブルに対して一般的に受け入れられている時間/空間のトレードオフを維持します。 ただし、このハッシュ テーブルまたはその他の種類のハッシュ テーブルのサイズを変更すると、操作が比較的遅くなる可能性があります。 可能な場合は、オプション initialCapacity
のコンストラクター引数としてサイズの見積もりを指定することをお勧めします。 追加の省略可能 loadFactor
なコンストラクター引数は、指定された数の要素に割り当てる領域の量を計算する際に使用するテーブル密度を指定することによって、初期テーブルの容量をカスタマイズするさらに手段を提供します。 また、このクラスの以前のバージョンとの互換性のために、コンストラクターは必要に応じて、内部サイズ設定の追加ヒントとして必要 concurrencyLevel
に応じて指定できます。 まったく同じ hashCode()
キーを多数使用すると、ハッシュ テーブルのパフォーマンスを低下させる確実な方法であることに注意してください。 影響を改善するために、キーがある場合、このクラスでは Comparable
キー間の比較順序を使用して、結び付けを解除できます。
Set
ConcurrentHashMap のプロジェクションは、作成 (使用#newKeySet()
)、または#newKeySet(int)
表示 (キーのみが対象であり、マップされた値が (おそらく一時的に) 使用されていないか、すべて同じマッピング値を受け取る場合に使用#keySet(Object)
できます。
ConcurrentHashMap は、値を使用して初期化#computeIfAbsent computeIfAbsent
することにより、スケーラブルな頻度マップ (ヒストグラムまたはマルチセットの形式) として使用java.util.concurrent.atomic.LongAdder
できます。 たとえば、カウントを a に ConcurrentHashMap<String,LongAdder> freqs
追加するには、 freqs.computeIfAbsent(key, k -> new LongAdder()).increment();
このクラスとそのビューと反復子は、すべての <em>optional</em> メソッドとIterator
インターフェイスをMap
実装します。
同様Hashtable
ですが、異なりHashMap
、このクラスでは<<>、キーまたは値として使用することはできません/em。>null
ConcurrentHashMaps では、一連の順次および並列の一括操作がサポートされています。これは、ほとんどの Stream
メソッドとは異なり、他のスレッドによって同時に更新されるマップでも安全に、そして多くの場合、感覚的に適用されるように設計されています。たとえば、共有レジストリ内の値のスナップショットの概要を計算する場合などです。 3 種類の操作があり、それぞれが 4 つの形式を持ち、キー、値、エントリ、および (キー、値) のペアを引数または戻り値として受け取ります。 ConcurrentHashMap の要素は特定の順序付けされず、異なる並列実行で異なる順序で処理される可能性があるため、指定された関数の正確性は、順序や、計算の進行中に一時的に変化する可能性がある他のオブジェクトや値に依存しないようにする必要があります。forEach アクションを除き、理想的には副作用のない必要があります。 オブジェクトに対する Map.Entry
一括操作では、メソッド setValue
はサポートされていません。
<ul><li>forEach: 各要素に対して特定のアクションを実行します。 バリアント フォームは、アクションを実行する前に、各要素に特定の変換を適用します。
<li>search: 各要素に特定の関数を適用した最初の使用可能な null 以外の結果を返します。結果が見つかった場合は、さらに検索をスキップします。
<li>reduce: 各要素を蓄積します。 指定された縮小関数は、順序付けには依存できません (より正式には、連想関数と可換関数の両方である必要があります)。 次の 5 つのバリエーションがあります。
<ul>
<li>単純な削減。 (対応する戻り値の型がないため、(キー、値) 関数の引数にはこのメソッドの形式はありません)。
<li>各要素に適用された特定の関数の結果を蓄積するマップされた削減。
<li>特定の基底値を使用したスカラー倍精度浮動小数点、longs、および int の削減。
</ul></ul>
これらの一括操作では、引数を parallelismThreshold
受け入れます。 現在のマップ サイズが指定されたしきい値より小さいと推定される場合、メソッドは順番に続行されます。 値 Long.MAX_VALUE
を使用すると、すべての並列処理が抑制されます。 値 1
を使用すると、すべての並列計算に使用されるサブタスクを完全に利用 ForkJoinPool#commonPool()
するのに十分なサブタスクにパーティション分割することで、最大限の並列処理が行われます。 通常は、最初にこれらの極端な値のいずれかを選択し、オーバーヘッドとスループットをトレードオフする間の値を使用するパフォーマンスを測定します。
一括操作のコンカレンシー プロパティは ConcurrentHashMap のプロパティに従います。Null 以外の結果が返され、関連するアクセス メソッドから get(key)
返された場合は、関連する挿入または更新との関係が発生する前に発生します。 一括操作の結果は、これらの要素ごとの関係の構成を反映します (ただし、何らかの形で静止することがわかっていない限り、マップ全体に関しては必ずしもアトミックであるとは限りません)。 逆に、マップ内のキーと値は null になることがないため、null は現在の結果の欠如を示す信頼できるアトミック インジケーターとして機能します。 このプロパティを維持するために、null はすべての非スカラー削減操作の暗黙的な基礎として機能します。 double、long、および int のバージョンの場合、基礎は、他の値と組み合わせると、その他の値を返すものです (より正式には、削減の ID 要素である必要があります)。 最も一般的な削減には、これらのプロパティがあります。たとえば、基準を 0 にして合計を計算したり、基準MAX_VALUEを使用して最小値を計算したりします。
引数として提供される検索関数と変換関数は、同様に null を返して、結果がないことを示す必要があります (この場合は使用されません)。 マップされた削減の場合、これにより、変換をフィルターとして機能し、要素を結合しない場合は null (またはプリミティブ特殊化の場合は ID ベース) を返すこともできます。 複合変換とフィルター処理を作成するには、検索または reduce 操作で使用する前に、この "null は現在何も存在しない" ルールの下に作成します。
Entry 引数を受け入れるメソッドまたは Entry 引数を返すメソッドは、キーと値の関連付けを維持します。 これらは、たとえば、最も大きな値のキーを見つける場合に役立ちます。 "plain" Entry 引数は、次を使用して new AbstractMap.SimpleEntry(k,v)
指定できます。
一括操作が突然完了し、指定された関数のアプリケーションで発生した例外がスローされる可能性があります。 同時に実行される他の関数でも例外がスローされる可能性がある、または最初の例外が発生しなかった場合は例外がスローされる可能性がある、このような例外を処理する場合は注意してください。
順次形式と比較した並列の高速化は一般的ですが、保証されません。 小さなマップに対して簡単な関数を含む並列操作は、計算を並列化する基になる作業が計算自体よりもコストが高い場合、シーケンシャル フォームよりも実行速度が遅くなる可能性があります。 同様に、すべてのプロセッサが関連のないタスクの実行をビジー状態にしている場合、並列化によって実際の並列処理があまり行われるとは限りません。
すべてのタスク メソッドのすべての引数は null 以外である必要があります。
このクラスは、Java Collections Framework の メンバーです。
1\.5 で追加されました。
の Java ドキュメントjava.util.concurrent.ConcurrentHashMap
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
ConcurrentHashMap() |
既定の初期テーブル サイズ (16) を使用して、新しい空のマップを作成します。 |
ConcurrentHashMap(IDictionary) |
指定されたマップと同じマッピングを持つ新しいマップを作成します。 |
ConcurrentHashMap(Int32) |
動的なサイズ変更を必要とせずに、指定された数の要素に対応する初期テーブル サイズを持つ新しい空のマップを作成します。 |
ConcurrentHashMap(Int32, Single) |
指定された数の要素 () と初期テーブル密度 |
ConcurrentHashMap(Int32, Single, Int32) |
指定された数の要素 ()、初期テーブル密度 |
ConcurrentHashMap(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
プロパティ
Class |
この |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
IsEmpty |
追加する (継承元 AbstractMap) |
JniIdentityHashCode |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
JniPeerMembers |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 |
PeerReference |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
メソッド
Clear() |
追加する (継承元 AbstractMap) |
Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
Compute(Object, IBiFunction) |
指定したキーとその現在のマップされた値のマッピングの計算を試みます (または |
ComputeIfAbsent(Object, IFunction) |
指定したキーがまだ値に関連付けられていない場合は、指定されたマッピング関数を使用してその値の計算を試み、次の場合を除き |
ComputeIfPresent(Object, IBiFunction) |
指定したキーの値が存在する場合は、キーとその現在のマップされた値を指定して、新しいマッピングの計算を試みます。 |
Contains(Object) |
一部のキーがこのテーブルの指定した値にマップされているかどうかをテストします。 |
ContainsKey(Object) |
追加する (継承元 AbstractMap) |
ContainsValue(Object) |
追加する (継承元 AbstractMap) |
Dispose() |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
Dispose(Boolean) |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
Elements() |
このテーブル内の値の列挙を返します。 |
EntrySet() |
このマップに |
Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
ForEach(IBiConsumer) |
各アクション (キー、値) を実行します。 |
ForEach(Int64, IBiConsumer) |
各アクション (キー、値) を実行します。 |
ForEach(Int64, IBiFunction, IConsumer) |
各 null 以外の変換 (キー、値) ごとに、指定されたアクションを実行します。 |
ForEachEntry(Int64, IConsumer) |
各エントリに対して指定されたアクションを実行します。 |
ForEachEntry(Int64, IFunction, IConsumer) |
各エントリの null 以外の変換ごとに、指定されたアクションを実行します。 |
ForEachKey(Int64, IConsumer) |
各キーに対して指定されたアクションを実行します。 |
ForEachKey(Int64, IFunction, IConsumer) |
各キーの null 以外の変換ごとに、指定されたアクションを実行します。 |
ForEachValue(Int64, IConsumer) |
各値に対して指定されたアクションを実行します。 |
ForEachValue(Int64, IFunction, IConsumer) |
各値の null 以外の変換ごとに、指定されたアクションを実行します。 |
Get(Object) |
追加する (継承元 AbstractMap) |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
GetOrDefault(Object, Object) |
指定したキーのマップ先の値を返します。このマップにキーのマッピングが含まれている場合は、指定された既定値を返します。 |
JavaFinalize() |
オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
Keys() |
このテーブル内のキーの列挙を返します。 |
KeySet() |
追加する (継承元 AbstractMap) |
MappingCount() |
マッピングの数を返します。 |
Merge(Object, Object, IBiFunction) |
指定したキーがまだ (null 以外の) 値に関連付けられていない場合は、指定された値に関連付けます。 |
Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
Put(Object, Object) |
追加する (継承元 AbstractMap) |
PutAll(IDictionary) |
追加する (継承元 AbstractMap) |
PutIfAbsent(Object, Object) |
追加する |
Reduce(Int64, IBiFunction, IBiFunction) |
指定されたレジューサを使用して値を結合するために、すべての (キー、値) ペアの指定された変換を累積した結果を返します。ない場合は null を返します。 |
ReduceEntries(Int64, IBiFunction) |
指定されたレジューサを使用して値を結合するためにすべてのエントリを累積した結果を返します。ない場合は null を返します。 |
ReduceEntries(Int64, IFunction, IBiFunction) |
指定されたレジューサを使用して値を結合するためにすべてのエントリの指定された変換を累積した結果を返します。ない場合は null を返します。 |
ReduceEntriesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべてのエントリの指定された変換を累積した結果を返します。 |
ReduceEntriesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべてのエントリの指定された変換を累積した結果を返します。 |
ReduceEntriesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべてのエントリの指定された変換を累積した結果を返します。 |
ReduceKeys(Int64, IBiFunction) |
指定されたレジューサを使用して値を結合するためにすべてのキーを累積した結果を返します。ない場合は null を返します。 |
ReduceKeys(Int64, IFunction, IBiFunction) |
指定されたレジューサを使用して値を結合するためにすべてのキーの指定された変換を累積した結果を返します。ない場合は null を返します。 |
ReduceKeysToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべてのキーの指定された変換を累積した結果を返します。 |
ReduceKeysToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべてのキーの指定された変換を累積した結果を返します。 |
ReduceKeysToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべてのキーの指定された変換を累積した結果を返します。 |
ReduceToDouble(Int64, IToDoubleBiFunction, Double, IDoubleBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべての (キー、値) ペアの指定された変換を累積した結果を返します。 |
ReduceToInt(Int64, IToIntBiFunction, Int32, IIntBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべての (キー、値) ペアの指定された変換を累積した結果を返します。 |
ReduceToLong(Int64, IToLongBiFunction, Int64, ILongBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべての (キー、値) ペアの指定された変換を累積した結果を返します。 |
ReduceValues(Int64, IBiFunction) |
指定されたレジューサを使用して値を結合するためにすべての値を累積した結果を返します。ない場合は null を返します。 |
ReduceValues(Int64, IFunction, IBiFunction) |
指定されたレジューサを使用して値を結合するためにすべての値の指定された変換を累積した結果を返します。ない場合は null を返します。 |
ReduceValuesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべての値の指定された変換を累積した結果を返します。 |
ReduceValuesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべての値の指定された変換を累積した結果を返します。 |
ReduceValuesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator) |
指定されたレジューサを使用して値を結合し、指定された基準を ID 値として使用して、すべての値の指定された変換を累積した結果を返します。 |
Remove(Object) |
追加する (継承元 AbstractMap) |
Remove(Object, Object) |
追加する |
Replace(Object, Object) |
追加する |
Replace(Object, Object, Object) |
追加する |
ReplaceAll(IBiFunction) |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 |
Search(Int64, IBiFunction) |
指定された検索機能を各関数 (キー、値) に適用した場合は null 以外の結果を返し、ない場合は null を返します。 |
SearchEntries(Int64, IFunction) |
指定された検索機能を各エントリに適用した結果が null 以外の場合は null 以外の結果を返します。null を指定しない場合は null を返します。 |
SearchKeys(Int64, IFunction) |
指定された検索機能を各キーに適用した場合は null 以外の結果を返し、ない場合は null を返します。 |
SearchValues(Int64, IFunction) |
指定された検索機能を各値に適用した結果が null 以外の場合は null 以外の結果を返します。null を指定しない場合は null を返します。 |
SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
Size() |
追加する (継承元 AbstractMap) |
ToArray<T>() |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
ToString() |
オブジェクトの文字列表現を返します。 (継承元 Object) |
UnregisterFromRuntime() |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
Values() |
追加する (継承元 AbstractMap) |
Wait() |
現在のスレッドが目覚めるまで待機させます。通常<は、通知<>/em> または <em>割り込み/em> を受け<取ります。 (継承元 Object) |
Wait(Int64) |
現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが目覚めるまで待機します。通常<><は、通知/em> または <em>中断</em> によって、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
明示的なインターフェイスの実装
IJavaPeerable.Disposed() |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
IJavaPeerable.Finalized() |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
IJavaPeerable.JniManagedPeerState |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 (継承元 Object) |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 |
GetJniTypeName(IJavaPeerable) |
取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。 |