JavaTM Platform
Standard Ed. 6

java.util.concurrent
クラス ConcurrentHashMap<K,V>

java.lang.Object
  上位を拡張 java.util.AbstractMap<K,V>
      上位を拡張 java.util.concurrent.ConcurrentHashMap<K,V>
型パラメータ:
K - このマップが保持するキーの型
V - マップされる値の型
すべての実装されたインタフェース:
Serializable, ConcurrentMap<K,V>, Map<K,V>

public class ConcurrentHashMap<K,V>
extends AbstractMap<K,V>
implements ConcurrentMap<K,V>, Serializable

取得の完全な同時性および予想される調整可能な更新並行性をサポートするハッシュテーブルです。このクラスは、Hashtable と同じ機能仕様に従い、Hashtable の各メソッドに対応するバージョンのメソッドを含みます。ただし、すべての操作がスレッドセーフである場合でも、取得操作にロックは含まれないため、テーブル全体がロックされてすべてのアクセスが拒否されることはありません。このクラスは、スレッドの安全性には依存するが、同期の詳細に依存しないプログラム内で Hashtable との完全な相互運用が可能です。

通常、取得操作 (get を含む) ではブロックは実行されないため、更新操作とオーバーラップする場合があります (put および remove を含む)。取得では、開始時に保持している更新操作のうち、最後に「完了した」更新操作の結果が反映されます。putAllclear などの集計操作では、並行取得は一部のエントリの挿入や削除だけを反映します。同様に、Iterator および Enumeration は、ある時点または反復子/列挙の作成以降のハッシュテーブルの状態を反映する要素を返します。これらが ConcurrentModificationException をスローすることはありませんが、一度に 1 つのスレッドのみが反復子を使用するように設計されています。

更新操作で許可される並行処理は、オプションの concurrencyLevel コンストラクタ引数 (デフォルトは 16) により導かれます。この値は内部のサイズ設定のヒントとして使用されます。テーブルは内部的に分割され、指示された数の並行更新を競合しないように許可することを試みます。ハッシュテーブル内の配置は基本的にランダムであるため、実際の並行処理は異なります。理想的には、テーブルを並行して変更するスレッド数に対応した値を選択する必要があります。必要な値よりも著しく大きい値を使用すると領域と時間が浪費され、必要な値よりも著しく小さい値を使用するとスレッドが競合する可能性があります。ただし、通常は、絶対値の順序内部を過大評価および過小評価しても、それほど大きな影響はありません。変更を実行するのは 1 つのスレッドだけで、残りのスレッドはすべて読み取りだけを実行する場合、適切な値は 1 です。また、このハッシュテーブルまたはその他の種類のハッシュテーブルのサイズ変更は相対的に低速な操作であることから、可能な場合は、予想されるテーブルサイズの推定値をコンストラクタに指定しておくことをお勧めします。

このクラスとそのビューおよび反復子は、Map および Iterator インタフェースの「オプション」メソッドすべてを実装します。

Hashtable と同様に (HashMap とは異なる)、このクラスは、キーまたは値として null を使用することを許可しません。

このクラスは、Java Collections Framework のメンバーです。

導入されたバージョン:
1.5
関連項目:
直列化された形式

入れ子のクラスの概要
 
クラス java.util.AbstractMap から継承された入れ子のクラス/インタフェース
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
 
インタフェース java.util.Map から継承された入れ子のクラス/インタフェース
Map.Entry<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)
          指定されたキーがマップされている値を返します。
 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 ビューを返します。
 
クラス java.util.AbstractMap から継承されたメソッド
clone, equals, hashCode, toString
 
クラス java.lang.Object から継承されたメソッド
finalize, getClass, notify, notifyAll, wait, wait, wait
 
インタフェース java.util.Map から継承されたメソッド
equals, hashCode
 

コンストラクタの詳細

ConcurrentHashMap

public ConcurrentHashMap(int initialCapacity,
                         float loadFactor,
                         int concurrencyLevel)
指定された初期容量、負荷係数、および並行処理レベルで、新しい空のマップを作成します。

パラメータ:
initialCapacity - 初期容量。多数の要素に適合するよう、実装は内部のサイズ設定を実行する
loadFactor - サイズ変更の制御に使用される負荷係数のしきい値。サイズ変更は、ビンごとの要素の平均数がこのしきい値を超えた場合に実行できる
concurrencyLevel - 並行して更新中のスレッドの推定数。 多数のスレッドに適合するよう、実装は内部のサイズ設定を実行する
例外:
IllegalArgumentException - 初期容量が負であるか、負荷係数または concurrencyLevel が正ではない場合

ConcurrentHashMap

public ConcurrentHashMap(int initialCapacity,
                         float loadFactor)
指定された初期容量と負荷係数、およびデフォルトの concurrencyLevel (16) で、新しい空のマップを作成します。

パラメータ:
initialCapacity - 多数の要素に適合するよう、実装は内部のサイズ設定を実行する
loadFactor - サイズ変更の制御に使用される負荷係数のしきい値。 サイズ変更は、ビンごとの要素の平均数がこのしきい値を超えた場合に実行できる
例外:
IllegalArgumentException - 要素の初期容量が負であるか負荷係数が正ではない場合
導入されたバージョン:
1.6

ConcurrentHashMap

public ConcurrentHashMap(int initialCapacity)
指定された初期容量、およびデフォルトの負荷係数 (0.75) と concurrencyLevel (16) で、新しい空のマップを作成します。

パラメータ:
initialCapacity - 初期容量多数の要素に適合するよう、実装は内部のサイズ設定を実行する
例外:
IllegalArgumentException - 要素の初期容量が負の場合

ConcurrentHashMap

public ConcurrentHashMap()
デフォルトの初期容量 (16)、負荷係数 (0.75)、および concurrencyLevel (16) で、新しい空のマップを作成します。


ConcurrentHashMap

public ConcurrentHashMap(Map<? extends K,? extends V> m)
指定されたマップと同じマッピングで新しいマップを作成します。マップは、指定されたマップのマッピング数の 1.5 倍の容量または 16 (どちらか大きいほう)、およびデフォルトの負荷係数 (0.75) と concurrencyLevel (16) で作成されます。

パラメータ:
m - マップ
メソッドの詳細

isEmpty

public boolean isEmpty()
マップがキーと値のマッピングを保持しない場合に true を返します。

定義:
インタフェース Map<K,V> 内の isEmpty
オーバーライド:
クラス AbstractMap<K,V> 内の isEmpty
戻り値:
マップがキーと値のマッピングを保持しない場合は true

size

public int size()
マップ内のキー値マッピングの数を返します。マップに Integer.MAX_VALUE より多くの要素がある場合は、Integer.MAX_VALUE を返します。

定義:
インタフェース Map<K,V> 内の size
オーバーライド:
クラス AbstractMap<K,V> 内の size
戻り値:
マップ内のキーと値のマッピングの数

get

public V get(Object key)
指定されたキーがマップされている値を返します。そのキーのマッピングがこのマップに含まれていない場合は null を返します。

つまり、このメソッドは、key.equals(k) となるキー k から値 v へのマッピングがこのマップに含まれている場合は v を返し、それ以外の場合は null を返します。このようなマッピングが 1 つだけあります。

定義:
インタフェース Map<K,V> 内の get
オーバーライド:
クラス AbstractMap<K,V> 内の get
パラメータ:
key - 関連付けられた値が返されるキー
戻り値:
指定されたキーがマップされている値。そのキーのマッピングがこのマップに含まれていない場合は null
例外:
NullPointerException - 指定されたキーが null である場合

containsKey

public boolean containsKey(Object key)
指定されたオブジェクトが、このテーブルのキーかどうかを判定します。

定義:
インタフェース Map<K,V> 内の containsKey
オーバーライド:
クラス AbstractMap<K,V> 内の containsKey
パラメータ:
key - 可能なキー
戻り値:
equals メソッドで決められているように、指定されたオブジェクトがこのテーブルのキーである場合は true、そうでない場合は false
例外:
NullPointerException - 指定されたキーが null である場合

containsValue

public boolean containsValue(Object value)
マップが 1 つまたは複数のキーと指定された値をマッピングしている場合に true を返します。注:このメソッドは、ハッシュテーブルの完全な内部トラバーサルを必要とするため、containsKey メソッドよりも処理速度が大幅に遅くなります。

定義:
インタフェース Map<K,V> 内の containsValue
オーバーライド:
クラス AbstractMap<K,V> 内の containsValue
パラメータ:
value - マップにあるかどうかを判定される値
戻り値:
このマップが 1 つ以上のキーを指定された値にマッピングする場合は true
例外:
NullPointerException - 指定された値が null である場合

contains

public boolean contains(Object value)
一部のキーがこのテーブル内の指定された値にマッピングされるかどうかをテストする従来のメソッド。このメソッドは containsValue(java.lang.Object) と同じ機能を持ちます。これは、Java Collections Framework の導入前にこのメソッドをサポートしていた、Hashtable クラスとの完全な互換性を維持するためだけに存在します。

パラメータ:
value - 検索する値
戻り値:
あるキーが equals メソッドで決められている、このテーブルの value 引数にマッピングする場合は true、そうでない場合は false
例外:
NullPointerException - 指定された値が null である場合

put

public V put(K key,
             V value)
このテーブルで、指定されたキーを指定された値にマップします。キーや値は null にすることはできません。

この値は、元のキーと等しいキーを指定して get メソッドを呼び出すことによって取り出すことができます。

定義:
インタフェース Map<K,V> 内の put
オーバーライド:
クラス AbstractMap<K,V> 内の put
パラメータ:
key - 指定された値が関連付けられるキー
value - 指定されたキーに関連付けられる値
戻り値:
key に関連付けられた以前の値、 または、key のマッピングがない場合は null
例外:
NullPointerException - 指定されたキーまたは値が null の場合

putIfAbsent

public V putIfAbsent(K key,
                     V value)
指定されたキーがまだ値と関連付けられていない場合は、指定された値に関連付けます。これは次の記述と同等です。
if (!map.containsKey(key))
return map.put(key, value);
else
return map.get(key);
ただし、アクションが原子的に実行される点が異なります。

定義:
インタフェース ConcurrentMap<K,V> 内の putIfAbsent
パラメータ:
key - 指定された値が関連付けられるキー
value - 指定されたキーに関連付けられる値
戻り値:
指定されたキーに関連付けられた以前の値。キーのマッピングがなかった場合は null
例外:
NullPointerException - 指定されたキーまたは値が null の場合

putAll

public void putAll(Map<? extends K,? extends V> m)
指定したマップからこのマップにすべてのマッピングをコピーします。これにより、マップが指定されたマップ内に現在あるキーのすべてに対して持っていたマッピングが置き換えられます。

定義:
インタフェース Map<K,V> 内の putAll
オーバーライド:
クラス AbstractMap<K,V> 内の putAll
パラメータ:
m - マップに格納されるマッピング

remove

public V remove(Object key)
キー (およびそれに対応する値) をこのマップから削除します。そのキーがマップにない場合は、何も行いません。

定義:
インタフェース Map<K,V> 内の remove
オーバーライド:
クラス AbstractMap<K,V> 内の remove
パラメータ:
key - 削除する必要があるキー
戻り値:
key に関連付けられた以前の値。key のマッピングがなかった場合は null
例外:
NullPointerException - 指定されたキーが null である場合

remove

public boolean remove(Object key,
                      Object value)
指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを削除します。これは次の記述と同等です。
if (map.containsKey(key) && map.get(key).equals(value)) {
map.remove(key);
return true;
} else return false;
ただし、アクションが原子的に実行される点が異なります。

定義:
インタフェース ConcurrentMap<K,V> 内の remove
パラメータ:
key - 指定された値が関連付けられるキー
value - 指定されたキーに関連付けられていると予想される値
戻り値:
値が削除された場合は true
例外:
NullPointerException - 指定されたキーが null である場合

replace

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;
ただし、アクションが原子的に実行される点が異なります。

定義:
インタフェース ConcurrentMap<K,V> 内の replace
パラメータ:
key - 指定された値が関連付けられるキー
oldValue - 指定されたキーに関連付けられていると予想される値
newValue - 指定されたキーに関連付けられる値
戻り値:
値が置換された場合は true
例外:
NullPointerException - 引数が 1 つでも null の場合

replace

public V replace(K key,
                 V value)
キーが値に現在マッピングされている場合にのみ、そのキーのエントリを置換します。これは次の記述と同等です。
if (map.containsKey(key)) {
return map.put(key, value);
} else return null;
ただし、アクションが原子的に実行される点が異なります。

定義:
インタフェース ConcurrentMap<K,V> 内の replace
パラメータ:
key - 指定された値が関連付けられるキー
value - 指定されたキーに関連付けられる値
戻り値:
指定されたキーに関連付けられた以前の値。キーのマッピングがなかった場合は null
例外:
NullPointerException - 指定されたキーまたは値が null の場合

clear

public void clear()
すべてのマッピングをマップから削除します。

定義:
インタフェース Map<K,V> 内の clear
オーバーライド:
クラス AbstractMap<K,V> 内の clear

keySet

public Set<K> keySet()
このマップに含まれるキーの Set ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。セットは、Iterator.removeSet.removeremoveAllretainAll、および clear の各オペレーションより、マップから対応するマッピングを削除する要素削除処理をサポートします。Set は、add オペレーションや addAll オペレーションはサポートしていません。

ビューの Iterator は「弱一貫性」を持つ反復子であり、ConcurrentModificationException をスローすることはなく、反復子の構築時に存在した要素をトラバースすることを保証します。また、構築後のすべての変更を反映します (ただし保証されてはいない)。

定義:
インタフェース Map<K,V> 内の keySet
オーバーライド:
クラス AbstractMap<K,V> 内の keySet
戻り値:
マップに含まれているキーのセットビュー

values

public Collection<V> values()
このマップに含まれる値の Collection ビューを返します。コレクションはマップと連動しているので、マップに対する変更はコレクションに反映され、またコレクションに対する変更はマップに反映されます。コレクションは、Iterator.removeCollection.removeremoveAllretainAll、および clear オペレーションにより、マップから対応するマッピングを削除する要素削除処理をサポートします。Set は、add オペレーションや addAll オペレーションはサポートしていません。

ビューの Iterator は「弱一貫性」を持つ反復子であり、ConcurrentModificationException をスローすることはなく、反復子の構築時に存在した要素をトラバースすることを保証します。また、構築後のすべての変更を反映します (ただし保証されてはいない)。

定義:
インタフェース Map<K,V> 内の values
オーバーライド:
クラス AbstractMap<K,V> 内の values
戻り値:
マップ内に含まれている値のコレクションビュー

entrySet

public Set<Map.Entry<K,V>> entrySet()
このマップに含まれるマップの Set ビューを返します。セットはマップと連動しているので、マップに対する変更はセットに反映され、また、セットに対する変更はマップに反映されます。削除は、Iterator.removeSet.removeremoveAllretainAll、および clear の各オペレーションを通して行います。Set は、add オペレーションや addAll オペレーションはサポートしていません。

ビューの Iterator は「弱一貫性」を持つ反復子であり、ConcurrentModificationException をスローすることはなく、反復子の構築時に存在した要素をトラバースすることを保証します。また、構築後のすべての変更を反映します (ただし保証されてはいない)。

定義:
インタフェース Map<K,V> 内の entrySet
定義:
クラス AbstractMap<K,V> 内の entrySet
戻り値:
マップ内に保持されているマッピングのセットビュー

keys

public Enumeration<K> keys()
テーブルにあるキーの列挙を返します。

戻り値:
テーブルにあるキーのリスト
関連項目:
keySet()

elements

public Enumeration<V> elements()
テーブルにある値のリストを返します。

戻り値:
テーブルにある値のリスト
関連項目:
values()

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。