LinkedHashMap クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
予測可能な反復順序を持つインターフェイスの Map
ハッシュ テーブルとリンク リストの実装。
[Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class LinkedHashMap : Java.Util.HashMap, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type LinkedHashMap = class
inherit HashMap
interface IMap
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 継承
- 属性
- 実装
注釈
予測可能な反復順序を持つインターフェイスの Map
ハッシュ テーブルとリンク リストの実装。 この実装は、すべてのエントリを通じて実行される二重にリンクされたリストを維持するという点で HashMap
異なります。 このリンクリストは、反復順序を定義します。これは通常、キーがマップに挿入された順序 (挿入順序) です。 キーがマップに 再挿入 された場合、挿入順序は影響を受けないことを確認してください。 (呼び出しの直前に が返true
されるときに が呼び出されたm.containsKey(k)
場合m.put(k, v)
、キーk
はマップm
に再挿入されます)。
この実装では、(およびHashtable
) によってHashMap
提供される指定されていない、一般的に混同的な順序からクライアントを解放します。これにより、 に関連するTreeMap
コストの増加は発生しません。 これは、元のマップの実装に関係なく、元のマップと同じ順序のマップのコピーを生成するために使用できます。
void foo(Map m) {
Map copy = new LinkedHashMap(m);
...
}
この手法は、モジュールが入力時にマップを受け取り、それをコピーし、後でコピーの順序によって決定される結果を返す場合に特に便利です。 (クライアントは一般に、提示された順序と同じ順序で返されることを高く評価しています)。
リンクされたハッシュ マップを作成するための特別な #LinkedHashMap(int,float,boolean) constructor
ハッシュ マップが用意されています。このハッシュ マップの反復順序は、エントリが最後にアクセスされた順序であり、最も最近アクセスされた順から最近アクセスされた順序 (アクセス順) です。 この種のマップは、LRU キャッシュの構築に適しています。 、putIfAbsent
、get
、、getOrDefault
、computeIfAbsent
computeIfPresent
compute
または merge
の各メソッドをput
呼び出すと、対応するエントリにアクセスできます (呼び出しが完了した後に存在すると仮定)。 メソッドは replace
、値が置き換えられた場合にのみエントリにアクセスします。 メソッドは putAll
、指定したマップのエントリ セット反復子によってキーと値のマッピングが提供される順序で、指定されたマップ内のマッピングごとに 1 つのエントリ アクセスを生成します。 他のメソッドはエントリ アクセスを生成しません。 特に、コレクション ビューに対する操作 は 、バッキング マップの反復順序には影響しません。
#removeEldestEntry(Map.Entry)
新しいマッピングがマップに追加されたときに、古いマッピングを自動的に削除するためのポリシーを適用するために、 メソッドをオーバーライドできます。
このクラスは、すべての省略可能な Map
操作を提供し、null 要素を許可します。 と同様 HashMap
に、ハッシュ関数がバケット間で要素を適切に分散すると仮定すると、基本的な操作 (add
および contains
remove
) に一定時間のパフォーマンスが提供されます。 パフォーマンスは、 の少し下 HashMap
にある可能性があります。これは、リンクされたリストを維持するための追加コストが原因です。ただし、1 つの例外があります。ただし、 のコレクション ビュー LinkedHashMap
を反復処理するには、容量に関係なく、マップの サイズ に比例した時間が必要です。 に HashMap
対するイテレーションはコストが高くなる可能性が高く、 容量に比例した時間が必要です。
リンクされたハッシュ マップには、そのパフォーマンスに影響を与える 2 つのパラメーター ( 初期容量 と 読み込み係数) があります。 これらは、 に対して HashMap
と正確に定義されます。 ただし、初期容量に対して過度に高い値を選択した場合のペナルティは、このクラスの反復時間は容量の影響を受けないため、このクラスの場合よりも HashMap
厳しくありません。
<strong>この実装は同期されないことに注意してください。</strong> 複数のスレッドがリンクされたハッシュ マップに同時にアクセスし、少なくとも 1 つのスレッドがマップを構造的に変更する場合は、<>em/em> を外部で同期する必要があります<。 これは通常、マップを自然にカプセル化するオブジェクトで同期することによって実現されます。
このようなオブジェクトが存在しない場合は、 メソッドを使用してマップを Collections#synchronizedMap Collections.synchronizedMap
"ラップ" する必要があります。 これは、マップへの誤った同期されていないアクセスを防ぐために、作成時に行うのが最善です。
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
構造の変更とは、1 つ以上のマッピングを追加または削除する操作です。アクセス順序付きのリンクされたハッシュ マップの場合は、反復順序に影響します。 挿入順序のリンクされたハッシュ マップでは、マップに既に含まれているキーに関連付けられている値を変更するだけでは、構造的な変更ではありません。 <strong>アクセス順序付きのリンクされたハッシュ マップでは、 を使用してマップ get
に対してクエリを実行するだけで、構造が変更されます。 </strong>)
このクラスのすべてのコレクション ビュー メソッドによって返されるコレクションのメソッドによってiterator
返される反復子は><、fail-fast</em> です。反復子が作成された後にいつでもマップが構造的に変更される場合、反復子の独自remove
のメソッドを除き、反復子は をConcurrentModificationException
スローします。 したがって、同時変更に直面すると、反復子は、将来、決定論的でない任意の動作を危険にさらすのではなく、迅速かつクリーンに失敗します。
反復子のフェイル ファスト動作は、一般に、同期されていない同時変更が存在する場合にハード保証を行うことは不可能であるため、保証できないことに注意してください。 フェイルファスト反復子は、ベスト エフォートベースで スロー ConcurrentModificationException
します。 したがって、この例外に依存するプログラムを正しく記述するのは間違っています。 反復子のフェイルファスト動作は、バグを検出するためにのみ使用する必要があります。
このクラスのすべてのコレクション ビュー メソッドによって返されるコレクションの spliterator メソッドによって返される分割子は<、遅延>バインディング</em>、em>fail-fast</em>、<さらに を報告Spliterator#ORDERED
します。 <em>Note</em>: Android Nougat (API レベル 24 および 25) でのこれらの分割子の実装では、 が報告 Spliterator#ORDERED
されているにもかかわらず、間違った順序 (正しい順序を使用する反復子と矛盾) が使用されます。 API レベル 24 および 25 で正しく順序付けられた Spliterator を取得するには、次のコード フラグメントを使用できます。<コレクション ビューc = lhm.keySet()
の場合は ul<>li>、c = lhm.entrySet()
または c = lhm.values()
のc.spliterator()
代わりに を使用java.util.Spliterators.spliterator(c, c.spliterator().characteristics())
します。 <li>または c.parallelStream()
のc.stream()
代わりに を使用java.util.stream.StreamSupport.stream(spliterator, false)
して、このような から (非パラメーター) java.util.stream.Stream
をSpliterator
構築します。 </ul> これらの回避策は、 が の場合lhm
LinkedHashMap
にのみ推奨されることに注意してください。
このクラスは、 Java Collections Framework のメンバーです。
1.4 で追加されました。
の Java ドキュメント java.util.LinkedHashMap
。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
LinkedHashMap() |
既定の初期容量 (16) と読み込み係数 (0) を使用して、空の挿入順序付き |
LinkedHashMap(IDictionary) |
指定したマップと同じマッピングを使用して、挿入順序付け |
LinkedHashMap(Int32) |
指定された初期容量と既定の読み込み係数 (0) を持つ空の挿入順序付き |
LinkedHashMap(Int32, Single) |
指定された初期容量と読み込み係数を持つ空の挿入順序付き |
LinkedHashMap(Int32, Single, Boolean) |
指定された初期容量、読み込み係数、順序付けモードで空 |
LinkedHashMap(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
プロパティ
Class |
この |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
IsEmpty |
追加する (継承元 AbstractMap) |
JniIdentityHashCode |
予測可能な反復順序を持つインターフェイスの |
JniPeerMembers |
予測可能な反復順序を持つインターフェイスの |
PeerReference |
予測可能な反復順序を持つインターフェイスの |
ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。 |
ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。 |
メソッド
Clear() |
追加する (継承元 AbstractMap) |
Clone() |
この |
Compute(Object, IBiFunction) |
予測可能な反復順序を持つインターフェイスの |
ComputeIfAbsent(Object, IFunction) |
予測可能な反復順序を持つインターフェイスの |
ComputeIfPresent(Object, IBiFunction) |
予測可能な反復順序を持つインターフェイスの |
ContainsKey(Object) |
追加する (継承元 AbstractMap) |
ContainsValue(Object) |
追加する (継承元 AbstractMap) |
Dispose() |
予測可能な反復順序を持つインターフェイスの |
Dispose(Boolean) |
予測可能な反復順序を持つインターフェイスの |
EntrySet() |
このマップに |
Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
ForEach(IBiConsumer) |
予測可能な反復順序を持つインターフェイスの |
Get(Object) |
追加する (継承元 AbstractMap) |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
GetOrDefault(Object, Object) |
予測可能な反復順序を持つインターフェイスの |
JavaFinalize() |
ガベージ コレクションがオブジェクトへの参照がなくなったと判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
KeySet() |
追加する (継承元 AbstractMap) |
Merge(Object, Object, IBiFunction) |
予測可能な反復順序を持つインターフェイスの |
Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドをウェイクアップします。 (継承元 Object) |
NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドをウェイクアップします。 (継承元 Object) |
Put(Object, Object) |
追加する (継承元 AbstractMap) |
PutAll(IDictionary) |
追加する (継承元 AbstractMap) |
PutIfAbsent(Object, Object) |
予測可能な反復順序を持つインターフェイスの |
Remove(Object) |
追加する (継承元 AbstractMap) |
Remove(Object, Object) |
指定したキーのマッピングが存在する場合は、このマップから削除します。 (継承元 HashMap) |
RemoveEldestEntry(IMapEntry) |
このマップで |
Replace(Object, Object) |
予測可能な反復順序を持つインターフェイスの |
Replace(Object, Object, Object) |
予測可能な反復順序を持つインターフェイスの |
ReplaceAll(IBiFunction) |
予測可能な反復順序を持つインターフェイスの |
SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
Size() |
追加する (継承元 AbstractMap) |
ToArray<T>() |
予測可能な反復順序を持つインターフェイスの |
ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
UnregisterFromRuntime() |
予測可能な反復順序を持つインターフェイスの |
Values() |
追加する (継承元 AbstractMap) |
Wait() |
現在のスレッドが起動するまで待機します。通常<>は、通知</em> または <em>割り込み</em によって待機します>。 (継承元 Object) |
Wait(Int64) |
現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
明示的なインターフェイスの実装
IJavaPeerable.Disposed() |
予測可能な反復順序を持つインターフェイスの |
IJavaPeerable.DisposeUnlessReferenced() |
予測可能な反復順序を持つインターフェイスの |
IJavaPeerable.Finalized() |
予測可能な反復順序を持つインターフェイスの |
IJavaPeerable.JniManagedPeerState |
予測可能な反復順序を持つインターフェイスの |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
予測可能な反復順序を持つインターフェイスの |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
予測可能な反復順序を持つインターフェイスの |
IJavaPeerable.SetPeerReference(JniObjectReference) |
予測可能な反復順序を持つインターフェイスの |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
予測可能な反復順序を持つインターフェイスの |
GetJniTypeName(IJavaPeerable) |
予測可能な反復順序を持つインターフェイスの |