JavaTM 2 Platform
Standard Ed. 5.0

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 などの集計操作では、同時取得は一部のエントリの挿入や削除だけを反映します。同様に、Iterators および Enumerations は、ある時点または反復子/列挙の作成以来のハッシュテーブルの状態を反映する要素を返します。これらが ConcurrentModificationException をスローすることはありませんが、一度に 1 つのスレッドのみが反復子を使用するように設計されています。

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

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

このクラスは、キーまたは値として null を使用することを許可しません。これは、Hashtable と同様の動作であり、HashMap とは異なる動作です。

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

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

入れ子のクラスの概要
 
インタフェース java.util.Map から継承された入れ子のクラス/インタフェース
Map.Entry<K,V>
 
コンストラクタの概要
ConcurrentHashMap()
          デフォルトの初期容量、負荷係数、および concurrencyLevel で、新しい空のマップを作成します。
ConcurrentHashMap(int initialCapacity)
          指定された初期容量、デフォルトの負荷係数および concurrencyLevel で、新しい空のマップを作成します。
ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
          指定された初期容量、負荷係数、および並行処理レベルで、新しい空のマップを作成します。
ConcurrentHashMap(Map<? extends K,? extends V> t)
          指定されたマップと同じマッピングで新しいマップを作成します。
 
メソッドの概要
 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()
          このマップに含まれるマッピングのコレクションビューを返します。
 V get(Object key)
          指定されたキーにマップされている、テーブルの値を返します。
 boolean isEmpty()
          マップがキーと値のマッピングを保持しない場合に true を返します。
 Enumeration<K> keys()
          テーブルにあるキーのリストを返します。
 Set<K> keySet()
          このマップに含まれるキーのセットビューを返します。
 V put(K key, V value)
          テーブルで、指定された key を指定された value にマップします。
 void putAll(Map<? extends K,? extends V> t)
          指定したマップからこのマップにすべてのマッピングをコピーします。
 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()
          このマップに含まれる値のコレクションビューを返します。
 
クラス 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)
指定された初期容量、デフォルトの負荷係数および concurrencyLevel で、新しい空のマップを作成します。

パラメータ:
initialCapacity - 初期容量。ここで指定された要素数を受け入れることができるように、実装は内部のサイズ設定を実行する
例外:
IllegalArgumentException - 要素の初期容量が負の場合

ConcurrentHashMap

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


ConcurrentHashMap

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

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

isEmpty

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

この実装は size() == 0 の結果を返します。

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

size

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

この実装は entrySet().size() を返します。

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

get

public V get(Object key)
指定されたキーにマップされている、テーブルの値を返します。

定義:
インタフェース Map<K,V> 内の get
オーバーライド:
クラス AbstractMap<K,V> 内の get
パラメータ:
key - テーブルのキー
戻り値:
指定されたキーにマップされているテーブルの値。指定されたキーにマップされている値がない場合は null
例外:
NullPointerException - キーが null の場合
関連項目:
AbstractMap.containsKey(Object)

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)
テーブルで、指定された key を指定された value にマップします。このキーや値を null にすべきではありません。

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

定義:
インタフェース Map<K,V> 内の put
オーバーライド:
クラス AbstractMap<K,V> 内の put
パラメータ:
key - テーブルキー
value - 値
戻り値:
テーブルの指定されたキーの前の値。それがない場合は 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> t)
指定したマップからこのマップにすべてのマッピングをコピーします。 これらのマッピングによって、現在指定された Map のキーに対してこのマップが持つマッピングが置換されます。

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

remove

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

定義:
インタフェース Map<K,V> 内の remove
オーバーライド:
クラス AbstractMap<K,V> 内の remove
パラメータ:
key - 削除するキー
戻り値:
テーブルでそのキーにマップされている値。マップされている値がない場合は null
例外:
NullPointerException - キーが null の場合

remove

public boolean remove(Object key,
                      Object value)
キーが指定された値に現在マッピングされている場合にのみ、そのキーのエントリを削除します。次のように動作します。
 
  if (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.get(key).equals(oldValue)) {
     map.put(key, newValue);
     return true;
 } else return false;
 
ただし、アクションが原子的に実行される点が異なります。

定義:
インタフェース ConcurrentMap<K,V> 内の replace
パラメータ:
key - 指定される値が関連付けられるキー
oldValue - 指定されるキーに関連付けられると予想される値
newValue - 指定されるキーに関連付けられる値
戻り値:
値が置換された場合は true
例外:
NullPointerException - 指定されたキーまたは値が 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()
このマップに含まれるキーのセットビューを返します。セットはマップを基にしているので、マップへの変更はセット内で反映され、セットへの変更はマップ内で反映されます。セットは、Iterator.removeSet.removeremoveAllretainAll、および clear の各オペレーションを介して、このマップから対応するマッピングを削除する要素削除処理をサポートします。add オペレーションや addAll オペレーションはサポートされていません。ビューに返される iterator は「弱一貫性」を持つ反復子であり、ConcurrentModificationException をスローすることは決してなく、反復子の構築時に存在した要素を全探索することを保証します。また、構築後の変更を反映することも可能です (ただし保証されてはいない)。

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

values

public Collection<V> values()
このマップに含まれる値のコレクションビューを返します。コレクションはマップを基にしているので、マップへの変更はコレクション内で反映され、コレクションへの変更はマップ内で反映されます。コレクションは、Iterator.removeCollection.removeremoveAllretainAll、および clear の各オペレーションを介して、このマップから対応するマッピングを削除する要素削除処理をサポートします。add オペレーションや addAll オペレーションはサポートされていません。ビューに返される iterator は「弱一貫性」を持つ反復子であり、ConcurrentModificationException をスローすることは決してなく、反復子の構築時に存在した要素を全探索することを保証します。また、構築後の変更を反映することも可能です (ただし保証されてはいない)。

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

entrySet

public Set<Map.Entry<K,V>> entrySet()
このマップに含まれるマッピングのコレクションビューを返します。返されるコレクション内の各要素は、Map.Entry です。コレクションはマップを基にしているので、マップへの変更はコレクション内で反映され、コレクションへの変更はマップ内で反映されます。コレクションは、Iterator.removeCollection.removeremoveAllretainAll、および clear の各オペレーションを介して、このマップから対応するマッピングを削除する要素削除処理をサポートします。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 2 Platform
Standard Ed. 5.0

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

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