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の各メソッドに対応するメソッドのバージョンを含みます。 ただし、すべての操作がスレッド セーフであっても、取得操作はロックを伴<></em>を行い、すべてのアクセスを妨げる方法でテーブル全体をロックするためのサポート<em>not</em>があります。 このクラスは、スレッド セーフに依存するが、同期の詳細には依存しないプログラムの Hashtable と完全に相互運用できます。

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

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

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

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

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

Hashtableと同様に、HashMapとは異なり、このクラス<em>not</em>nullをキーまたは値として使用できます。

ConcurrentHashMaps は、ほとんどの Stream メソッドとは異なり、他のスレッドによって同時に更新されるマップでも安全かつ賢明に適用されるように設計されている一連の順次および並列の一括操作をサポートします。たとえば、共有レジストリ内の値のスナップショットの概要を計算する場合などです。 3 種類の操作があり、それぞれが 4 つの形式を持ち、キー、値、エントリ、および (キー、値) ペアを引数および/または戻り値として使用する関数を受け取ります。 ConcurrentHashMap の要素は特定の順序付けされず、異なる並列実行で異なる順序で処理される可能性があるため、指定された関数の正確性は、順序や、計算の進行中に一時的に変化する可能性がある他のオブジェクトや値に依存しないようにする必要があります。forEach アクションを除き、理想的には副作用のない必要があります。 Map.Entry オブジェクトに対する一括操作では、メソッドのsetValueはサポートされていません。

<ul><li>forEach: 各要素に対して特定のアクションを実行します。 バリアント フォームは、アクションを実行する前に、各要素に特定の変換を適用します。

<li>search: 各要素に特定の関数を適用した場合に使用可能な最初の null 以外の結果を返します。結果が見つかった場合は、さらに検索をスキップします。

<li>reduce: 各要素を累積します。 指定された縮小関数は、順序付けには依存できません (より正式には、連想関数と可換関数の両方である必要があります)。 次の 5 つのバリエーションがあります。

<ul>

<li>Plain の削減。 (対応する戻り値の型がないため、(キー、値) 関数の引数にはこのメソッドの形式はありません)。

<li>各要素に適用された特定の関数の結果を蓄積するマップされた減少。

<li>スカラー double、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 引数を受け入れるメソッドまたは Entry 引数を返すメソッドは、キーと値の関連付けを維持します。 これらは、たとえば、最も大きな値のキーを見つける場合に役立ちます。 "plain" Entry 引数は、 new AbstractMap.SimpleEntry(k,v)を使用して指定できます。

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

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

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

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

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

java.util.concurrent.ConcurrentHashMapの Java ドキュメント。

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

コンストラクター

名前 説明
ConcurrentHashMap()

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

ConcurrentHashMap(IDictionary)

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

ConcurrentHashMap(Int32, Single, Int32)

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

ConcurrentHashMap(Int32, Single)

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

ConcurrentHashMap(Int32)

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

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, Object)

追加する

Remove(Object)

追加する

(継承元 AbstractMap)
Replace(Object, Object, Object)

追加する

Replace(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>notified</em> または <em>interrupted</em>。

(継承元 Object)
Wait(Int64, Int32)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。

(継承元 Object)
Wait(Int64)

現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</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)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

取得の完全なコンカレンシーと、更新プログラムの高いコンカレンシーをサポートするハッシュ テーブル。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象