WeakHashMap クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
Map インターフェイスのハッシュ テーブル ベースの実装(<em>weak キー</em>。
[Android.Runtime.Register("java/util/WeakHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class WeakHashMap : Java.Util.AbstractMap, IDisposable
[<Android.Runtime.Register("java/util/WeakHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type WeakHashMap = class
inherit AbstractMap
interface IMap
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 継承
- 属性
- 実装
注釈
Map インターフェイスのハッシュ テーブル ベースの実装(<em>weak キー</em>。 キーが通常使用されなくなった場合、 WeakHashMap のエントリは自動的に削除されます。 より正確には、特定のキーのマッピングが存在する場合、ガベージ コレクターによってキーが破棄されるのを防ぐ、つまり、ファイナライズ可能にし、最終処理し、再利用することはできません。 キーが破棄されると、そのエントリは実質的にマップから削除されるため、このクラスの動作は他の Map 実装とは若干異なります。
null 値と null キーの両方がサポートされています。 このクラスには、 HashMap クラスと同様のパフォーマンス特性があり、 <em>initial capacity</em> と <em>load factor</em> の同じ効率パラメーターがあります。
ほとんどのコレクション クラスと同様に、このクラスは同期されません。 同期された WeakHashMap は、 Collections#synchronizedMap Collections.synchronizedMap メソッドを使用して構築できます。
このクラスは主に、 equals メソッドが == 演算子を使用してオブジェクト ID をテストするキー オブジェクトで使用することを目的としています。 このようなキーが破棄された後は再作成できないため、後で WeakHashMap でそのキーを検索することは不可能であり、そのエントリが削除されたことに驚きます。 このクラスは、 equals メソッドがオブジェクト ID ( String インスタンスなど) に基づいていないキー オブジェクトと完全に連携します。 ただし、このような再作成可能なキー オブジェクトでは、キーが破棄された WeakHashMap エントリを自動的に削除すると、混乱を招く可能性があります。
WeakHashMap クラスの動作はガベージ コレクターのアクションに一部依存するため、このクラスにはいくつかの使い慣れた (必須ではありませんが) Mapインバリアントは保持されません。 ガベージ コレクターはいつでもキーを破棄できるため、 WeakHashMap は、不明なスレッドがエントリを自動的に削除しているかのように動作する可能性があります。 特に、 WeakHashMap インスタンスで同期し、そのミューテーター メソッドを呼び出さない場合でも、 size メソッドは時間の経過と同時に小さい値を返し、 isEmpty メソッドが false を返してから trueできます。 containsKey メソッドは特定のキーの true 以降の false を返し、 get メソッドは特定のキーの値を返しますが、後で戻 nullput メソッドが null を返し、 remove メソッドがマップ内にあるように見えたキーの false を返し、キー セット、値コレクション、およびエントリ セットを連続して調べて、要素の数を連続して小さくします。
WeakHashMap内の各キー オブジェクトは、弱参照の参照先として間接的に格納されます。 そのため、キーは、マップの内側と外側の両方で、弱い参照がガベージ コレクターによってクリアされた後にのみ、自動的に削除されます。
<strong>Implementation note:</strong>WeakHashMap 内の値オブジェクトは、通常の厳密な参照によって保持されます。 したがって、キーが破棄されないようにするため、値オブジェクトが直接または間接的に独自のキーを強く参照しないように注意する必要があります。 値オブジェクトは、 WeakHashMap 自体を介してそのキーを間接的に参照する可能性があることに注意してください。つまり、値オブジェクトは、関連する値オブジェクトが最初の値オブジェクトのキーを強く参照する他のキー オブジェクトを強く参照する可能性があります。 マップ内の値がそれらに対する強い参照を保持しているマップに依存しない場合、これに対処する 1 つの方法は、挿入する前に WeakReferences 内で値自体をラップし、次のように m.put(key, new WeakReference(value))し、各 getでラップを解除することです。
このクラスのすべての "コレクション ビュー メソッド" によって返されるコレクションの iterator メソッドによって返される反復子は 、フェイル ファストです。反復子が作成された後にいつでもマップが構造的に変更された場合、反復子独自の remove メソッドを使用する場合を除き、反復子は ConcurrentModificationExceptionをスローします。 したがって、同時変更が発生した場合、反復子は、将来不確定な時点で任意の非決定論的な動作を危険にさらすのではなく、迅速かつクリーンに失敗します。
反復子のフェイルファスト動作は、一般的に言えば、非同期の同時変更が存在する場合にハード保証することは不可能であるため、保証できないことに注意してください。 フェイルファスト反復子は、ベスト エフォートベースで ConcurrentModificationException をスローします。 したがって、正しさのためにこの例外に依存するプログラムを記述するのは間違っています。 反復子のフェイルファスト動作はバグを検出するためにのみ使用する必要があります。
このクラスは、 Java Collections Framework のメンバーです。
1.2 で追加されました。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
| 名前 | 説明 |
|---|---|
| WeakHashMap() |
既定の初期容量 (16) と負荷係数 (0) を使用して、新しい空の |
| WeakHashMap(IDictionary) |
指定したマップと同じマッピングを持つ新しい |
| WeakHashMap(Int32, Single) |
指定された初期容量と特定の負荷係数を使用して、新しい空の |
| WeakHashMap(Int32) |
指定された初期容量と既定の負荷係数 (0) を使用して、新しい空の |
| WeakHashMap(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
プロパティ
| 名前 | 説明 |
|---|---|
| Class |
この |
| Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
| IsEmpty |
追加する (継承元 AbstractMap) |
| JniIdentityHashCode |
相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。 (継承元 Object) |
| JniManagedPeerState |
|
| JniPeerMembers |
|
| PeerReference |
このJava ピアの JNI オブジェクト参照を取得します。 (継承元 Object) |
| ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
| ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
メソッド
| 名前 | 説明 |
|---|---|
| Clear() |
追加する (継承元 AbstractMap) |
| Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
|
| ContainsKey(Object) |
追加する (継承元 AbstractMap) |
| ContainsValue(Object) |
追加する (継承元 AbstractMap) |
| Dispose() |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| Dispose(Boolean) |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| DisposeUnlessReferenced() |
|
| EntrySet() |
このマップに含まれるマッピングの |
| Equals(Object) |
|
| Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
| ForEach(IBiConsumer) |
|
| Get(Object) |
追加する (継承元 AbstractMap) |
| GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
| JavaFinalize() |
古い.
オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
| KeySet() |
追加する (継承元 AbstractMap) |
| NewWeakHashMap(Int32) |
|
| Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
| NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
| Put(Object, Object) |
追加する (継承元 AbstractMap) |
| PutAll(IDictionary) |
追加する (継承元 AbstractMap) |
| Remove(Object) |
追加する (継承元 AbstractMap) |
| ReplaceAll(IBiFunction) |
|
| SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
|
| Size() |
追加する (継承元 AbstractMap) |
| ToArray<T>() |
このJava配列ラッパーからマネージド配列を作成します。 (継承元 Object) |
| ToString() |
オブジェクトの文字列表現を返します。 (継承元 Object) |
| UnregisterFromRuntime() |
相互運用ランタイムからこのJava ピアの登録を解除します。 (継承元 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() |
|
| IJavaPeerable.Finalized() |
|
| IJavaPeerable.JniObjectReferenceControlBlock |
|
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
|
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
|
| IJavaPeerable.SetPeerReference(JniObjectReference) |
|
| IJavaPeerable.UnregisterFromRuntime() |
|
拡張メソッド
| 名前 | 説明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
インスタンス |
| JavaAs<TResult>(IJavaPeerable) |
|
| JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
| JavaCast<TResult>(IJavaObject) |
|
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
|