K
- このマップで保持されるキーの型V
- マップされる値の型public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable
Hashtable
と同じ機能仕様に従い、Hashtable の各メソッドに対応するバージョンのメソッドを含みます。ただし、すべての操作がスレッドセーフである場合でも、取得操作にロックは含まれないため、テーブル全体がロックされてすべてのアクセスが拒否されることはありません。このクラスは、そのスレッドの安全性に依存するが、その同期の詳細には依存しないプログラムで Hashtable と完全に相互運用できます。
通常、取得操作 (get を含む) ではブロックは実行されないため、更新操作とオーバーラップする場合があります (put および remove を含む)。取得では、開始時に保持している更新操作のうち、最後に完了した更新操作の結果が反映されます。putAll や clear などの集計操作では、並行取得は一部のエントリの挿入または削除だけを反映する可能性があります。同様に、Iterator および Enumeration は、ある時点またはイテレータ/列挙の作成以降のハッシュテーブルの状態を反映する要素を返します。これらが ConcurrentModificationException
をスローすることはありません。しかし、一度に 1 つのスレッドのみがイテレータを使用するように設計されています。
更新操作で許可される並行処理は、オプションの concurrencyLevel コンストラクタ引数 (デフォルトは 16) により導かれます。この値は内部のサイズ設定のヒントとして使用されます。テーブルは内部的に分割され、指示された数の並行更新を競合しないように許可することを試みます。ハッシュテーブル内の配置は基本的にランダムであるため、実際の並行処理は異なります。理想的には、テーブルを並行して変更するスレッド数に対応した値を選択する必要があります。必要な値よりも著しく大きい値を使用すると領域と時間が浪費され、必要な値よりも著しく小さい値を使用するとスレッドが競合する可能性があります。ただし、通常は、絶対値の順序内部を過大評価および過小評価しても、それほど大きな影響はありません。変更を実行するのは 1 つのスレッドだけで、残りのスレッドはすべて読み取りだけを実行する場合、適切な値は 1 です。また、このハッシュテーブルまたはその他の種類のハッシュテーブルのサイズ変更は相対的に低速な操作であることから、可能な場合は、予想されるテーブルサイズの推定値をコンストラクタに指定しておくことをお勧めします。
このクラスとそのビューおよびイテレータは、Map
および Iterator
インタフェースのオプションメソッドすべてを実装します。
Hashtable
と同様に (HashMap
とは異なる)、このクラスは、キーまたは値として null が使用されることを許可しません。
このクラスは、Java Collections Framework のメンバーです。
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
コンストラクタと説明 |
---|
ConcurrentHashMap()
デフォルトの初期容量 (16)、負荷係数 (0.75)、および concurrencyLevel (16) で、新しい空のマップを作成します。
|
ConcurrentHashMap(int initialCapacity)
指定された初期容量、およびデフォルトの負荷係数 (0.75) と concurrencyLevel (16) で、新しい空のマップを作成します。
|
ConcurrentHashMap(int initialCapacity, float loadFactor)
指定された初期容量と負荷係数、およびデフォルトの concurrencyLevel (16) で、新しい空のマップを作成します。
|
ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
指定された初期容量、負荷係数、および並行処理レベルで、新しい空のマップを作成します。
|
ConcurrentHashMap(Map<? extends K,? extends V> m)
指定されたマップと同じマッピングで新しいマップを作成します。
|
修飾子と型 | メソッドと説明 |
---|---|
void |
clear()
すべてのマッピングをマップから削除します。
|
boolean |
contains(Object value)
一部のキーがこのテーブル内の指定された値にマッピングされるかどうかをテストする従来のメソッド。
|
boolean |
containsKey(Object key)
指定されたオブジェクトが、このテーブルのキーかどうかを判定します。
|
boolean |
containsValue(Object value)
マップが 1 つまたは複数のキーを指定された値にマッピングしている場合に true を返します。
|
Enumeration<V> |
elements()
テーブルにある値のリストを返します。
|
Set<Map.Entry<K,V>> |
entrySet()
このマップに含まれるマッピングの
Set ビューを返します。 |
V |
get(Object key)
指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合は
null を返します。 |
boolean |
isEmpty()
このマップがキーと値のマッピングを保持しない場合に true を返します。
|
Enumeration<K> |
keys()
テーブルにあるキーの列挙を返します。
|
Set<K> |
keySet()
このマップに含まれるキーの
Set ビューを返します。 |
V |
put(K key, V value)
このテーブルで、指定されたキーを指定された値にマップします。
|
void |
putAll(Map<? extends K,? extends V> m)
指定したマップからこのマップにすべてのマッピングをコピーします。
|
V |
putIfAbsent(K key, V value)
指定されたキーがまだ値と関連付けられていない場合は、指定された値に関連付けます。
|
V |
remove(Object key)
キー (およびそれに対応する値) をこのマップから削除します。
|
boolean |
remove(Object key, Object value)
指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを削除します。
|
V |
replace(K key, V value)
キーが値に現在マッピングされている場合にのみ、そのキーのエントリを置換します。
|
boolean |
replace(K key, V oldValue, V newValue)
指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを置換します。
|
int |
size()
このマップ内のキー値マッピングの数を返します。
|
Collection<V> |
values()
このマップに含まれる値の
Collection ビューを返します。 |
clone, equals, hashCode, toString
public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
initialCapacity
- 初期容量。多数の要素に適合するよう、実装は内部のサイズ設定を実行する。loadFactor
- サイズ変更の制御に使用される負荷係数のしきい値。サイズ変更は、ビンごとの要素の平均数がこのしきい値を超えた場合に実行できる。concurrencyLevel
- 並行して更新しているスレッドの推定数。多数のスレッドに適合するよう、実装は内部のサイズ設定を実行する。IllegalArgumentException
- 初期容量が負であるか、負荷係数または concurrencyLevel が正でない場合。public ConcurrentHashMap(int initialCapacity, float loadFactor)
initialCapacity
- 実装は、この多数の要素を格納するように内部のサイズ設定を実行する。loadFactor
- サイズ変更の制御に使用される負荷係数のしきい値。サイズ変更は、ビンごとの要素の平均数がこのしきい値を超えた場合に実行できる。IllegalArgumentException
- 要素の初期容量が負であるか、または負荷係数が正でない場合public ConcurrentHashMap(int initialCapacity)
initialCapacity
- 初期容量。多数の要素に適合するよう、実装は内部のサイズ設定を実行する。IllegalArgumentException
- 要素の初期容量が負の場合。public ConcurrentHashMap()
public boolean isEmpty()
public int size()
public V get(Object key)
null
を返します。
つまり、このメソッドは、key.equals(k)
となるキー k
から値 v
へのマッピングがこのマップに含まれている場合は v
を返し、それ以外の場合は null
を返します。このようなマッピングは 1 つのみ存在できます。
get
、インタフェース: Map<K,V>
get
、クラス: AbstractMap<K,V>
key
- 関連付けられた値が返されるキーnull
NullPointerException
- 指定されたキーが null である場合public boolean containsKey(Object key)
containsKey
、インタフェース: Map<K,V>
containsKey
、クラス: AbstractMap<K,V>
key
- 使用可能なキーNullPointerException
- 指定されたキーが null である場合public boolean containsValue(Object value)
containsValue
、インタフェース: Map<K,V>
containsValue
、クラス: AbstractMap<K,V>
value
- このマップにあるかどうかが判定される値NullPointerException
- 指定された値が null である場合public boolean contains(Object value)
containsValue(java.lang.Object)
と機能的には同じであり、Java Collections Framework の導入前にこのメソッドをサポートしていた Hashtable
クラスとの完全な互換性を保証するためにのみ存在します。value
- 検索する値NullPointerException
- 指定された値が null である場合public V put(K key, V value)
この値は、元のキーに等しいキーを指定して get メソッドを呼び出すことによって取得できます。
put
、インタフェース: Map<K,V>
put
、クラス: AbstractMap<K,V>
key
- 指定された値が関連付けられるキーvalue
- 指定されたキーに関連付けられる値NullPointerException
- 指定されたキーまたは値が null の場合public V putIfAbsent(K key, V value)
if (!map.containsKey(key)) return map.put(key, value); else return map.get(key);ただし、アクションが原子的に実行される点が異なります。
putIfAbsent
、インタフェース: ConcurrentMap<K,V>
key
- 指定された値が関連付けられるキーvalue
- 指定されたキーに関連付けられる値NullPointerException
- 指定されたキーまたは値が null の場合public void putAll(Map<? extends K,? extends V> m)
public V remove(Object key)
remove
、インタフェース: Map<K,V>
remove
、クラス: AbstractMap<K,V>
key
- 削除するキーNullPointerException
- 指定されたキーが null である場合public boolean remove(Object key, Object value)
if (map.containsKey(key) && map.get(key).equals(value)) { map.remove(key); return true; } else return false;ただし、アクションが原子的に実行される点が異なります。
remove
、インタフェース: ConcurrentMap<K,V>
key
- 指定された値が関連付けられるキーvalue
- 指定されたキーに関連付けられていると予想される値NullPointerException
- 指定されたキーが null である場合public boolean replace(K key, V oldValue, V newValue)
if (map.containsKey(key) && map.get(key).equals(oldValue)) { map.put(key, newValue); return true; } else return false;ただし、アクションが原子的に実行される点が異なります。
replace
、インタフェース: ConcurrentMap<K,V>
key
- 指定された値が関連付けられるキーoldValue
- 指定されたキーに関連付けられていると予想される値newValue
- 指定されたキーに関連付けられる値NullPointerException
- 引数が 1 つでも null の場合public V replace(K key, V value)
if (map.containsKey(key)) { return map.put(key, value); } else return null;ただし、アクションが原子的に実行される点が異なります。
replace
、インタフェース: ConcurrentMap<K,V>
key
- 指定された値が関連付けられるキーvalue
- 指定されたキーに関連付けられる値NullPointerException
- 指定されたキーまたは値が null の場合public void clear()
public Set<K> keySet()
Set
ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットは、要素の削除をサポートします。これにより、Iterator.remove、Set.remove、removeAll、retainAll、および clear 操作を使用して、このマップから対応するマッピングが削除されます。add または addAll オペレーションはサポートしていません。
ビューのiterator は「弱一貫性」を持つイテレータであり、ConcurrentModificationException
をスローすることはなく、イテレータの構築時に存在した要素をトラバースすることを保証します。また、構築後のすべての変更を反映します (ただし保証されてはいない)。
public Collection<V> values()
Collection
ビューを返します。コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。コレクションは、要素の削除をサポートします。この削除では、Iterator.remove、Collection.remove、removeAll、retainAll、および clear オペレーションを使用して、このマップから対応するマッピングが削除されます。add または addAll オペレーションはサポートしていません。
ビューのiterator は「弱一貫性」を持つイテレータであり、ConcurrentModificationException
をスローすることはなく、イテレータの構築時に存在した要素をトラバースすることを保証します。また、構築後のすべての変更を反映します (ただし保証されてはいない)。
public Set<Map.Entry<K,V>> entrySet()
Set
ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットは要素の削除をサポートします。Iterator.remove、Set.remove、removeAll、retainAll、および clear オペレーションで対応するマッピングをマップから削除します。add または addAll オペレーションはサポートしていません。
ビューのiterator は「弱一貫性」を持つイテレータであり、ConcurrentModificationException
をスローすることはなく、イテレータの構築時に存在した要素をトラバースすることを保証します。また、構築後のすべての変更を反映します (ただし保証されてはいない)。
public Enumeration<K> keys()
keySet()
public Enumeration<V> elements()
values()
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.