クラス MultivaluedHashMap<K,V>
- java.lang.ObjectSE
-
- jakarta.ws.rs.core.AbstractMultivaluedMap<K,V>
-
- jakarta.ws.rs.core.MultivaluedHashMap<K,V>
- 型パラメーター:
K
- このマップによって維持されるキーの型。V
- マップされた値の型。
- 実装されたすべてのインターフェース:
MultivaluedMap<K,V>
、SerializableSE
、MapSE<K,ListSE<V>>
public class MultivaluedHashMap<K,V> extends AbstractMultivaluedMap<K,V> implements SerializableSE
MultivaluedMap
インターフェースのハッシュテーブルベースの実装。この実装は、すべてのオプションのマップ操作を提供します。このクラスは、マップの順序について保証するものではありません。特に、オーダーが長期にわたって一定に保たれることを保証するものではありません。実装により、
null
キーが許可されます。デフォルトでは、実装はnull
値も許可しますが、無視します。この動作は、保護されたaddNull(...)
およびaddFirstNull(...)
メソッドをオーバーライドすることでカスタマイズできます。この実装は、ハッシュ関数がバケット間で要素を適切に分散すると仮定して、基本操作(
get
およびput
)に一定時間のパフォーマンスを提供します。コレクションビューの反復には、マップインスタンスの「キャパシティ」(バケットの数)とそのサイズ(キーと値のマッピングの数)を足した時間に比例する時間が必要です。反復のパフォーマンスが重要な場合は、初期容量を高く設定しすぎない(または負荷係数を低くしすぎない)ことが非常に重要です。MultivaluedHashMap
のインスタンスには、そのパフォーマンスに影響を与える 2 つのパラメーターがあります。 初期容量と負荷係数です。 容量はハッシュテーブル内のバケットの数であり、初期容量はハッシュテーブルが作成されたときの容量です。 負荷係数は、ハッシュテーブルの容量が自動的に増加する前に、ハッシュテーブルがどの程度いっぱいになるかを示す尺度です。ハッシュテーブルのエントリ数が負荷係数と現在の容量の積を超えると、ハッシュテーブルが再ハッシュされる(つまり、内部データ構造が再構築される)ため、ハッシュテーブルのバケット数は約 2 倍になります。一般的なルールとして、デフォルトの負荷係数(.75)は、時間とスペースのコスト間の適切なトレードオフを提供します。値を大きくすると、スペースのオーバーヘッドは減少しますが、ルックアップコストは増加します(
get
およびput
を含むHashMap
クラスのほとんどの操作で反映されます)。マップ内の予想されるエントリ数とその負荷係数は、その初期容量を設定するときに考慮に入れて、再ハッシュ操作の数を最小限に抑える必要があります。初期容量がエントリの最大数を負荷係数で割った値より大きい場合、再ハッシュ操作は発生しません。多くのマッピングを
MultivaluedHashMap
インスタンスに格納する場合、十分に大きな容量でマッピングを作成すると、テーブルを拡張するために必要に応じて自動再ハッシュを実行するよりも効率的にマッピングを格納できます。この実装は同期が保証されていないことに注意してください。複数のスレッドが同時にハッシュマップにアクセスし、少なくとも 1 つのスレッドがマップを構造的に変更する場合、外部で同期する必要があります。(構造的変更とは、1 つ以上のマッピングを追加または削除する操作です。インスタンスにすでに含まれているキーに関連付けられた値を変更するだけでは、構造的変更は行われません)これは通常、マップを自然にカプセル化するオブジェクトで同期することによって行われます。
このクラスのすべての「コレクションビューメソッド」によって返されるイテレータはフェイルファストです。イテレータが作成された後、マップが構造的にいつでも変更された場合、イテレータ自身の
イテレータのフェイルファスト動作は、一般的に言えば、非同期の同時変更が存在する場合にハードな保証を行うことが不可能であるため、保証できないことに注意してください。フェイルファストイテレータは、ベストエフォートベースでremove
メソッド以外の方法で、イテレータはConcurrentModificationException
SE をスローします。同時変更に直面した場合、イテレーターは、将来の未確定の時点で恣意的な非決定論的な動作のリスクを冒すのではなく、迅速かつ完全に失敗します。ConcurrentModificationException
をスローします。この例外に依存して正確であるプログラムを作成するのは誤りです。反復子のフェイルファスト動作は、バグを検出するためだけに使用する必要があります。- 導入:
- 2.0
- 作成者:
- Paul Sandoz, Marek Potociar
- 関連事項:
- 直列化された形式
フィールドサマリー
クラス jakarta.ws.rs.core.AbstractMultivaluedMap から継承されたフィールド
store
コンストラクターのサマリー
コンストラクター コンストラクター 説明 MultivaluedHashMap()
デフォルトの初期容量(16
)とデフォルトの負荷係数(0.75
)で空の多値ハッシュマップを作成します。MultivaluedHashMap(int initialCapacity)
指定された初期容量とデフォルトの負荷係数(0.75
)で空の多値ハッシュマップを作成します。MultivaluedHashMap(int initialCapacity, float loadFactor)
指定された初期容量と負荷係数で空の多値ハッシュマップを作成します。MultivaluedHashMap(MultivaluedMap<? extends K,? extends V> map)
指定されたMultivaluedMap
と同じマッピングで新しい多値ハッシュマップを構築します。MultivaluedHashMap(MapSE<? extends K,? extends V> map)
指定された単一値Map
SE と同じマッピングで新しい多値ハッシュマップを作成します。
メソッドのサマリー
クラス jakarta.ws.rs.core.AbstractMultivaluedMap から継承されたメソッド
add, addAll, addAll, addFirst, addFirstNull, addNull, clear, containsKey, containsValue, entrySet, equals, equalsIgnoreValueOrder, get, getFirst, getValues, hashCode, isEmpty, keySet, put, putAll, putSingle, remove, size, toString, values
クラス java.lang.ObjectSE から継承されたメソッド
clone, finalize, getClass, notify, notifyAll, wait, waitSE, waitSE
インターフェース java.util.MapSE から継承されたメソッド
computeSE, computeIfAbsentSE, computeIfPresentSE, forEachSE, getOrDefaultSE, mergeSE, putIfAbsentSE, removeSE, replaceSE, replaceSE, replaceAllSE
コンストラクターの詳細
MultivaluedHashMap
public MultivaluedHashMap()
デフォルトの初期容量(16
)とデフォルトの負荷係数(0.75
)で空の多値ハッシュマップを作成します。
MultivaluedHashMap
public MultivaluedHashMap(int initialCapacity)
指定された初期容量とデフォルトの負荷係数(0.75
)で空の多値ハッシュマップを作成します。- パラメーター:
initialCapacity
- 初期容量。- 例外:
IllegalArgumentExceptionSE
- 初期容量が負の場合。
MultivaluedHashMap
public MultivaluedHashMap(int initialCapacity, float loadFactor)
指定された初期容量と負荷係数で空の多値ハッシュマップを作成します。- パラメーター:
initialCapacity
- 初期容量loadFactor
- 負荷係数- 例外:
IllegalArgumentExceptionSE
- 初期容量が負の場合、または負荷係数が正でない場合
MultivaluedHashMap
public MultivaluedHashMap(MultivaluedMap<? extends K,? extends V> map)
指定されたMultivaluedMap
と同じマッピングで新しい多値ハッシュマップを構築します。各キーの値を保持するList
SE インスタンスは、再利用される代わりに新しく作成されます。- パラメーター:
map
- この多値マップにマッピングが配置される多値マップ。- 例外:
NullPointerExceptionSE
- 指定されたマップがnull
の場合
MultivaluedHashMap
public MultivaluedHashMap(MapSE<? extends K,? extends V> map)
指定された単一値Map
SE と同じマッピングで新しい多値ハッシュマップを作成します。- パラメーター:
map
- マッピングがこの多値マップに配置される単一値マップ。- 例外:
NullPointerExceptionSE
- 指定されたマップがnull
の場合