ConcurrentHashMap クラス

定義

取得の完全なコンカレンシーと、更新に必要な高いコンカレンシーをサポートするハッシュ テーブル。

[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
継承
ConcurrentHashMap
属性
実装

注釈

取得の完全なコンカレンシーと、更新に対する予想される高いコンカレンシーをサポートするハッシュ テーブル。 このクラスは と同じ機能仕様 java.util.Hashtableに従い、 の各メソッドに対応するメソッドの Hashtableバージョンを含みます。 ただし、すべての操作がスレッド セーフであっても、取得操作では<>ロックが必要ありません<。>また、<><>すべてのアクセスを妨げる方法でテーブル全体をロックするためのサポートはありません。 このクラスは、スレッド セーフに依存するが、同期の詳細には依存しないプログラムでは、完全に相互運用できます Hashtable

取得操作 (を含む get) は通常ブロックされないため、更新操作 (および を含む put ) と remove重複する可能性があります。 取得には、その開始時に保持されている最新 <の em>完了</em> 更新操作の結果が反映されます。 (より正式には、特定のキーの更新操作では、更新された値を<>報告するそのキーに対する任意の (null 以外の) 取得との em happens-before</em> 関係が発生します)。 や clearなどのputAll集計操作の場合、同時取得では、一部のエントリの挿入または削除のみが反映される場合があります。 同様に、Iterators、Spliterators、および Enumerations は、反復子/列挙体の作成以降のある時点でのハッシュ テーブルの状態を反映する要素を返します。 彼らはem not</em>スローjava.util.ConcurrentModificationException ConcurrentModificationExceptionを行います<>。 ただし、反復子は一度に 1 つのスレッドでのみ使用するように設計されています。 、、 を含むsizeisEmptycontainsValue集計状態メソッドの結果は、通常、マップが他のスレッドで同時更新を行っていない場合にのみ役立つことに注意してください。 それ以外の場合、これらのメソッドの結果には、監視または推定の目的には適しているが、プログラム制御には適していない一時的な状態が反映されます。

競合が多すぎる場合 (つまり、個別のハッシュ コードを持つが、テーブル サイズの同じスロット 剰余に分類されるキー) が動的に展開されます。マッピングごとに約 2 つのビンを維持すると予想される平均効果 (サイズ変更のための 0.75 読み込み係数しきい値に対応)。 マッピングが追加および削除されると、この平均に大きな差異が発生する可能性がありますが、全体的には、ハッシュ テーブルに対して一般的に受け入れられる時間/空間のトレードオフが維持されます。 ただし、このハッシュ テーブルまたはその他の種類のハッシュ テーブルのサイズを変更すると、比較的遅い操作になる可能性があります。 可能な場合は、サイズの見積もりを省略可能 initialCapacity なコンストラクター引数として指定することをお勧めします。 追加の省略可能 loadFactor なコンストラクター引数を使用すると、指定した数の要素に割り当てる領域の量を計算する際に使用するテーブル密度を指定することで、初期テーブルの容量をさらにカスタマイズできます。 また、このクラスの以前のバージョンとの互換性のために、コンストラクターは必要に応じて、内部サイズ設定の追加ヒントとして予期される concurrencyLevel を指定できます。 まったく同じ hashCode() キーを多数使用すると、ハッシュ テーブルのパフォーマンスを低下させる確実な方法であることに注意してください。 影響を改善するために、キーが の場合、このクラスでは Comparableキー間の比較順序を使用して、結びつきを解除できます。

Set ConcurrentHashMap のプロジェクションは、(または を使用して#newKeySet()) 作成するか#newKeySet(int)、(キーのみが対象の場合にを使用して#keySet(Object)) 表示でき、マップされた値が (一時的に) 使用されていないか、すべて同じマッピング値を受け取ります。

ConcurrentHashMap は、値を使用して を使用#computeIfAbsent computeIfAbsentして初期化することで、スケーラブルな頻度マップ (ヒストグラムまたはマルチセットの形式) として使用java.util.concurrent.atomic.LongAdderできます。 たとえば、 にカウントを ConcurrentHashMap<String,LongAdder> freqs追加するには、 freqs.computeIfAbsent(key, k -> new LongAdder()).increment();

このクラスとそのビューと反復子は、 インターフェイスと Iterator インターフェイスのすべての <em>optional</em> メソッドをMap実装します。

と同様Hashtableに、このクラスとは異なりHashMap、このクラスでは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 のコンカレンシー プロパティに従います。および関連するアクセス メソッドから get(key) 返される null 以外の結果は、関連付けられた挿入または更新に対して発生前の関係になります。 一括操作の結果は、これらの要素ごとの関係の構成を反映します (ただし、何らかの形で静止することがわかっていない限り、マップ全体に関しては必ずしもアトミックではありません)。 逆に、マップ内のキーと値は null になることがないため、null は現在の結果の欠如を示す信頼できるアトミック インジケーターとして機能します。 このプロパティを維持するために、null はすべての非スカラー削減操作の暗黙的な基礎として機能します。 double、long、および int の各バージョンの場合、他の値と組み合わせると、その他の値が返されます (より正式には、減少のための ID 要素である必要があります)。 最も一般的な削減には、これらのプロパティがあります。たとえば、基準 0 または基準MAX_VALUEで最小の合計を計算します。

引数として提供される検索関数と変換関数も同様に null を返して、結果がないことを示す必要があります (その場合は使用されません)。 マップされた削減の場合、これにより変換がフィルターとして機能し、要素を組み合わせない場合は null (プリミティブ特殊化の場合は ID ベース) を返すこともできます。 複合変換とフィルター処理を作成するには、検索操作または reduce 操作で使用する前に、この "null" ルールの下に自分で作成します。

Entry 引数を受け入れるメソッドまたは返すメソッドは、キーと値の関連付けを維持します。 これらは、たとえば、最も大きな値のキーを見つけるときに役立つ場合があります。 "plain" Entry 引数は を使用して指定できることに注意してください new AbstractMap.SimpleEntry(k,v)

一括操作が突然完了し、指定された関数のアプリケーションで例外が発生する可能性があります。 他の同時実行関数でも例外がスローされる可能性がある、または最初の例外が発生しなかった場合は例外がスローされる可能性があるような例外を処理する場合に注意してください。

順次形式と比較した並列の高速化は一般的ですが、保証されません。 小さなマップに対する簡単な関数を含む並列演算は、計算自体よりも計算を並列化する基になる作業の方がコストが高い場合、シーケンシャル フォームよりも実行速度が遅くなる可能性があります。 同様に、すべてのプロセッサが関連のないタスクの実行に忙しい場合、並列処理は実際の並列処理にあまりつながりません。

すべてのタスク メソッドに対するすべての引数は null 以外である必要があります。

このクラスは、 Java Collections Framework のメンバーです。

1\.5 で追加されました。

java.util.concurrent.ConcurrentHashMapJava ドキュメント。

このページの一部は、によって作成および共有された作業に基づく変更であり、に記載されている条件に従って使用されます。

コンストラクター

ConcurrentHashMap()

既定の初期テーブル サイズ (16) を使用して、新しい空のマップを作成します。

ConcurrentHashMap(IDictionary)

指定したマップと同じマッピングを持つ新しいマップを作成します。

ConcurrentHashMap(Int32)

動的なサイズ変更を必要とせずに、指定された数の要素に対応する初期テーブル サイズを持つ新しい空のマップを作成します。

ConcurrentHashMap(Int32, Single)

指定された数の要素 () と初期テーブル密度loadFactor (initialCapacity) に基づいて、初期テーブル サイズを持つ新しい空のマップを作成します。

ConcurrentHashMap(Int32, Single, Int32)

指定された数の要素 ()、初期テーブル密度 ()、および同時に更新されるスレッドの数 (initialCapacityloadFactor) に基づいて、初期テーブル サイズを持つ新しい空のマップを作成しますconcurrencyLevel

ConcurrentHashMap(IntPtr, JniHandleOwnership)

JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。

プロパティ

Class

この Objectのランタイム クラスを返します。

(継承元 Object)
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)

指定したキーとその現在のマップされた値のマッピングの計算を試みます (または null 、現在のマッピングがない場合)。

ComputeIfAbsent(Object, IFunction)

指定したキーがまだ値に関連付けられていない場合は、指定されたマッピング関数を使用してその値の計算を試み、を除いて nullこのマップに入力します。

ComputeIfPresent(Object, IBiFunction)

指定したキーの値が存在する場合は、キーとその現在のマップされた値を指定して、新しいマッピングの計算を試みます。

Contains(Object)

一部のキーがこのテーブルの指定した値にマップされているかどうかをテストします。

ContainsKey(Object)

追加する

(継承元 AbstractMap)
ContainsValue(Object)

追加する

(継承元 AbstractMap)
Dispose()

取得の完全なコンカレンシーと、更新に必要な高いコンカレンシーをサポートするハッシュ テーブル。

(継承元 Object)
Dispose(Boolean)

取得の完全なコンカレンシーと、更新に必要な高いコンカレンシーをサポートするハッシュ テーブル。

(継承元 Object)
Elements()

このテーブル内の値の列挙を返します。

EntrySet()

このマップに Set 含まれるマッピングのビューを返します。

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 以外の結果を返します。null を指定しない場合は null を返します。

SearchEntries(Int64, IFunction)

指定された検索機能を各エントリに適用した結果が null 以外の場合は null 以外の結果を返し、null を返します (存在しない場合は null)。

SearchKeys(Int64, IFunction)

各キーに指定された検索機能を適用した結果が null 以外の場合は null 以外の結果を返し、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)

取得の完全なコンカレンシーと、更新に必要な高いコンカレンシーをサポートするハッシュ テーブル。

適用対象