- 型パラメータ:
K
- このマップで保持されるキーの型V
- マップされる値の型
- すべての実装されたインタフェース:
Serializable
,Cloneable
,Map<K,
V>
- 直系の既知のサブクラス:
LinkedHashMap
,PrinterStateReasons
Map
インタフェースのハッシュ表ベースの実装。 この実装では、すべてのオプションのマップ操作が提供され、null
値およびnull
キーが許可されます。 (HashMap
クラスは、Hashtable
とほぼ同等ですが、非同期でNULLが許可される点が異なります。) このクラスはマップの順序を保証しません。特に、その順序を常に一定に保つことを保証しません。
この実装は、ハッシュ関数が要素をバケット間で適切に分散すると仮定して、基本操作(get
およびput
)に対して一定時間のパフォーマンスを提供します。 コレクション・ビューを反復するには、HashMap
インスタンス(バケット数)の"容量"とそのサイズ(キーと値のマッピングの数)に比例した時間が必要です。 したがって、反復処理の性能が重要な場合は、初期容量をあまり高く(負荷係数をあまり低く)設定しないことが非常に重要です。
HashMap
のインスタンスには、そのパフォーマンスに影響する2つのパラメータがあります: 初期容量および負荷率。 容量はハッシュ表のバケット数であり、初期容量は単純にハッシュ表が作成された時点での容量です。 負荷係数は、ハッシュ表がどの程度いっぱいになると、その容量が自動的に増加されるかの基準です。 ハッシュ表エントリ数が負荷係数と現在の容量の積を超えると、ハッシュ表のハッシュがやり直され (つまり、内部データ構造が再構築され)、ハッシュ表のバケット数は約2倍になります。
ほとんどの場合、デフォルトの負荷係数(.75)では、時間コストとスペース・コストの釣合いを取ります。 値を大きくすると領域のオーバーヘッドは減少しますが、ルックアップ・コストは(get
やput
など、HashMap
クラスのほとんどの操作に反映されます)になります。 初期容量を設定するときは、rehashオペレーションの回数を最小限に抑えるために、マップのエントリ予定数および負荷係数を考慮する必要があります。 初期容量が、エントリの最大数を負荷係数で割った値より大きい場合、rehashオペレーションは起こりません。
多数のマッピングをHashMap
インスタンスに格納する場合、十分な容量でそれを作成すると、表の拡張に必要な自動リハッシングを実行するよりも、マッピングをより効率的に格納できます。 同じhashCode()
で多数のキーを使用すると、必ずいずれかのハッシュ表のパフォーマンスが低下することに注意してください。 影響を軽減するため、キーがComparable
である場合は、このクラスでキー間の比較順序を使用してキーの重複を解消できます。
この実装はsynchronizedされません。 複数のスレッドが並行してハッシュ・マップにアクセスし、それらのスレッドの少なくとも1つが構造的にマップを変更する場合は、外部でその同期をとる必要があります。 構造的な変更とは、1つ以上のマッピングを追加または削除するオペレーションのことです。すでにインスタンスに格納されているキーに関連付けられた値を変更することは構造的な変更ではありません。 これは通常、マップを自然にカプセル化する一部のオブジェクトでsynchronizedすることによって達成されます。 そのようなオブジェクトが存在しない場合は、Collections.synchronizedMap
メソッドを使用してマップを「ラップ」することをお薦めします。 マップが誤ってsynchronizedなしでアクセスされるのを防ぐために、作成時に行うことをお薦めします。
Map m = Collections.synchronizedMap(new HashMap(...));
このクラスの"コレクション表示メソッド"すべてによって返されるイテレータは、fail-fastです: イテレータの作成後にマップが構造的に変更された場合、イテレータ独自のremove
メソッド以外のすべての方法で、イテレータはConcurrentModificationException
をスローします。 このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。
通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。 フェイルファスト・イテレータは、ベスト・エフォート・ベースでConcurrentModificationException
をスローします。 したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。イテレータのフェイルファストの動作はバグを検出するためにのみ使用すべきです。
このクラスは、Java Collections Frameworkのメンバーです。
- 導入されたバージョン:
- 1.2
- 関連項目:
-
ネストされたクラスのサマリー
クラスjava.util.AbstractMapで宣言されたネストされたクラス/インタフェース
AbstractMap.SimpleEntry<K,
V>, AbstractMap.SimpleImmutableEntry<K, V> -
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明void
clear()
すべてのマッピングをマップから削除します。clone()
このHashMap
インスタンスのシャロー・コピーを返します: キーと値自体はクローンされません。指定されたキーとその現在のマップされた値のマッピングをコンピュートしようとします。現在のマッピング(オプションの操作)がない場合はnull
です。computeIfAbsent
(K key, Function<? super K, ? extends V> mappingFunction) 指定されたキーが値(または、null
にマップされます。)にまだ関連付けられていない場合、指定されたマッピング関数を使用してその値をコンピュートし、null
(オプションの操作)でないかぎりこのマップに入力します。computeIfPresent
(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) 指定されたキーの値が存在し、null以外の場合は、キーとその現在のマップされた値(オプションの操作)を指定して、新しいマッピングのコンピュートを試みます。boolean
containsKey
(Object key) 指定されたキーのマッピングがこのマップに含まれている場合にtrue
を返します。boolean
containsValue
(Object value) このマップが1つまたは複数のキーと指定された値をマッピングしている場合にtrue
を返します。entrySet()
このマップに含まれるマッピングのSet
ビューを返します。指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnull
を返します。boolean
isEmpty()
このマップがキーと値のマッピングを保持しない場合にtrue
を返します。keySet()
このマップに含まれるキーのSet
ビューを返します。指定されたキーがまだ値に関連付けられていない場合、またはnullに関連付けられている場合は、指定されたnull以外の値(オプションの操作)に関連付けます。static <K,
V> HashMap <K, V> newHashMap
(int numMappings) 必要なマッピング数に適した新しい空のHashMapを作成します。指定された値と指定されたキーをこのマップに関連付けます。void
指定されたマップからすべてのマッピングをマップにコピーします。指定されたキーのマッピングがあればマップから削除します。int
size()
このマップ内のキー値マッピングの数を返します。values()
このマップに含まれる値のCollection
ビューを返します。クラスjava.util.AbstractMapで宣言されたメソッド
equals, hashCode, toString
インタフェースjava.util.Mapで宣言されたメソッド
equals, forEach, getOrDefault, hashCode, putIfAbsent, remove, replace, replace, replaceAll
-
コンストラクタの詳細
-
HashMap
public HashMap(int initialCapacity, float loadFactor) 指定された初期容量と負荷係数を持つ空のHashMap
を構築します。- APIのノート:
- 予想される数のマッピングに対応する初期容量を持つ
HashMap
を作成するには、newHashMap
を使用します。 - パラメータ:
initialCapacity
- 初期容量loadFactor
- 負荷係数- 例外:
IllegalArgumentException
- 初期容量が負であるか、負荷係数が正でない場合
-
HashMap
public HashMap(int initialCapacity) 指定された初期容量およびデフォルトのロード・ファクタ(0.75)を使用して、空のHashMap
を作成します。- APIのノート:
- 予想される数のマッピングに対応する初期容量を持つ
HashMap
を作成するには、newHashMap
を使用します。 - パラメータ:
initialCapacity
- 初期容量。- 例外:
IllegalArgumentException
- 初期容量が負の場合。
-
HashMap
public HashMap()デフォルトの初期容量(16)およびデフォルトのロード・ファクタ(0.75)を使用して、空のHashMap
を作成します。 -
HashMap
指定されたMap
と同じマッピングで新しいHashMap
を作成します。HashMap
は、デフォルトのロード・ファクタ(0.75)と、指定したMap
のマッピングを保持するのに十分な初期容量で作成されます。- パラメータ:
m
- マッピングがこのマップに配置されるマップ- 例外:
NullPointerException
- 指定されたマップがnullの場合
-
-
メソッドの詳細
-
size
-
isEmpty
-
get
指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合はnull
を返します。つまり、このメソッドは、
(key==null ? k==null : key.equals(k))
となるキーk
から値v
へのマッピングがこのマップに含まれている場合はv
を返し、それ以外の場合はnull
を返します。 (このようなマッピングは1つのみ存在できます。)戻り値
null
は、マップがキーのマッピングを保持していないことを示すとはかぎりません。つまり、マップが明示的にキーをnull
にマップすることもあります。containsKey
操作を使うと、これら2つのケースを見分けることができます。 -
containsKey
public boolean containsKey(Object key) 指定されたキーのマッピングがこのマップに含まれている場合にtrue
を返します。- 定義:
- インタフェース
Map<K,
内のV> containsKey
- オーバーライド:
- クラス
AbstractMap<K,
のV> containsKey
- パラメータ:
key
- このマップ内にあるかどうかが判定されるキー- 戻り値:
- 指定されたキーのマッピングがこのマップに含まれている場合は
true
-
put
指定された値と指定されたキーをこのマップに関連付けます。 マップが以前にこのキーのマッピングを保持していた場合、古い値が置き換えられます。 -
putAll
-
remove
-
clear
-
containsValue
public boolean containsValue(Object value) このマップが1つまたは複数のキーと指定された値をマッピングしている場合にtrue
を返します。- 定義:
- インタフェース
Map<K,
内のV> containsValue
- オーバーライド:
- クラス
AbstractMap<K,
のV> containsValue
- パラメータ:
value
- このマップにあるかどうかが判定される値- 戻り値:
- このマップが1つまたは複数のキーを指定された値にマッピングしている場合は
true
-
keySet
このマップに含まれるキーのSet
ビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されていません(イテレータ自身のremove
オペレーションを除く)。 セットは要素の削除をサポートします。Iterator.remove
、Set.remove
、removeAll
、retainAll
、およびclear
オペレーションで対応するマッピングをマップから削除します。add
またはaddAll
操作はサポートされていません。 -
values
public Collection<V> values()このマップに含まれる値のCollection
ビューを返します。 コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。 コレクションの反復処理中にマップが変更された場合、反復処理の結果は定義されません(イテレータ自身のremove
オペレーションを除く)。 コレクションは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove
、Collection.remove
、removeAll
、retainAll
、およびclear
オペレーションを通して行います。add
またはaddAll
操作はサポートされていません。 -
entrySet
このマップに含まれるマッピングのSet
ビューを返します。 セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。 セットの反復処理中にマップが変更された場合、反復処理の結果は定義されません(イテレータ自身のremove
オペレーション、またはイテレータにより返されるマップ・エントリに対するsetValue
オペレーションを除く)。 セットは要素の削除をサポートしており、対応するマッピングをマップから削除できます。削除は、Iterator.remove
、Set.remove
、removeAll
、retainAll
、およびclear
オペレーションを通して行います。add
またはaddAll
操作はサポートされていません。 -
computeIfAbsent
指定されたキーが値(または、null
にマップされます。)にまだ関連付けられていない場合、指定されたマッピング関数を使用してその値をコンピュートし、null
(オプションの操作)でないかぎりこのマップに入力します。マッピング関数が
null
を返す場合、マッピングは記録されません。 マッピング関数自体が(unchecked)例外をスローした場合、例外は再スローされ、マッピングは記録されません。 もっとも一般的な用途は、次のように初期のマップされた値またはメモ化された結果として機能する新しいオブジェクトを構築することです。map.computeIfAbsent(key, k -> new Value(f(k)));
または、1つのキーで複数の値をサポートする複数値マップ
Map<K,Collection<V>>
を実装することです。map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
マッピング関数は、計算中にこのマップを変更しないでください。
このメソッドは、マッピング関数によって計算中にこのマップが変更されることが検出された場合に、ベスト・エフォート・ベースで
ConcurrentModificationException
をスローします。- 定義:
- インタフェース
Map<K,
内のV> computeIfAbsent
- パラメータ:
key
- 指定された値が関連付けられるキーmappingFunction
- 値をコンピュートするマッピング関数- 戻り値:
- 指定されたキーに関連付けられている現在の(既存の、または計算された)値。計算された値がnullである場合はnull
- 例外:
ConcurrentModificationException
- マップ機能がこのマップを変更したことが検出された場合
-
computeIfPresent
指定されたキーの値が存在し、null以外の場合は、キーとその現在のマップされた値(オプションの操作)を指定して、新しいマッピングのコンピュートを試みます。再マッピング関数が
null
を返す場合、マッピングは削除されます。 再マッピング関数自体が(unchecked)例外をスローした場合、例外は再スローされ、現在のマッピングは変更されません。再マッピング関数は、計算中にこのマップを変更しないでください。
このメソッドは、再マッピング関数によって計算中にこのマップが変更されることが検出された場合に、ベスト・エフォート・ベースで
ConcurrentModificationException
をスローします。- 定義:
- インタフェース
Map<K,
内のV> computeIfPresent
- パラメータ:
key
- 指定された値が関連付けられるキーremappingFunction
- 値をコンピュートするための再マップ関数- 戻り値:
- 指定されたキーに関連付けられる新しい値。存在しない場合はnull
- 例外:
ConcurrentModificationException
- リマッピング機能がこのマップを変更したことが検出された場合
-
compute
指定されたキーとその現在のマップされた値のマッピングをコンピュートしようとします。現在のマッピング(オプションの操作)がない場合はnull
です。 たとえば、次のように、値のマッピングにString
msgを作成または追加します。map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
merge()
メソッドは、多くの場合、より単純です。)再マッピング関数が
null
を返した場合、マッピングは削除されます。(最初に欠席した場合は不在のままです)。 再マッピング関数自体が(unchecked)例外をスローした場合、例外は再スローされ、現在のマッピングは変更されません。再マッピング関数は、計算中にこのマップを変更しないでください。
このメソッドは、再マッピング関数によって計算中にこのマップが変更されることが検出された場合に、ベスト・エフォート・ベースで
ConcurrentModificationException
をスローします。- 定義:
- インタフェース
Map<K,
内のV> compute
- パラメータ:
key
- 指定された値が関連付けられるキーremappingFunction
- 値をコンピュートするための再マップ関数- 戻り値:
- 指定されたキーに関連付けられる新しい値。存在しない場合はnull
- 例外:
ConcurrentModificationException
- リマッピング機能がこのマップを変更したことが検出された場合
-
merge
指定されたキーがまだ値に関連付けられていない場合、またはnullに関連付けられている場合は、指定されたnull以外の値(オプションの操作)に関連付けます。 それ以外の場合は、指定された再マッピング関数の結果で関連する値を置換し、結果がnull
の場合は削除します。 このメソッドは、1つのキーに対する複数のマップされた値を結合するときに使用できます。 たとえば、次のように、値のマッピングにString msg
を作成または追加します。map.merge(key, msg, String::concat)
再マッピング関数が
null
を返す場合、マッピングは削除されます。 再マッピング関数自体が(unchecked)例外をスローした場合、例外は再スローされ、現在のマッピングは変更されません。再マッピング関数は、計算中にこのマップを変更しないでください。
このメソッドは、再マッピング関数によって計算中にこのマップが変更されることが検出された場合に、ベスト・エフォート・ベースで
ConcurrentModificationException
をスローします。- 定義:
- インタフェース
Map<K,
内のV> merge
- パラメータ:
key
- 結果値が関連付けられるキーvalue
- キーに関連付けられた既存の値にマージされるnull以外の値。既存の値がない場合、またはキーにnull値が関連付けられている場合は、キーに関連付けられるnull以外の値remappingFunction
- 存在する場合に値を再計算するための再マッピング関数- 戻り値:
- 指定されたキーに関連付けられた新しい値。キーに値が関連付けられなかった場合はnull
- 例外:
ConcurrentModificationException
- リマッピング機能がこのマップを変更したことが検出された場合
-
clone
public Object clone()このHashMap
インスタンスのシャロー・コピーを返します: キーと値自体はクローンされません。- オーバーライド:
- クラス
AbstractMap<K,
のV> clone
- 戻り値:
- このマップのシャロー・コピー
- 関連項目:
-
newHashMap
public static <K,V> HashMap<K,V> newHashMap(int numMappings) 必要なマッピング数に適した新しい空のHashMapを作成します。 返されるマップではデフォルトのロード係数0.75が使用され、初期容量は通常十分に大きいため、マップのサイズを変更せずに必要な数のマッピングを追加できます。- 型パラメータ:
K
- 新しいマップによって保持されるキーのタイプV
- マップされる値の型- パラメータ:
numMappings
- マッピングの予想数- 戻り値:
- 新しく作成されたマップ
- 例外:
IllegalArgumentException
- numMappingsが負の場合- 導入されたバージョン:
- 19
-