-
- 型パラメータ:
K- このマップで保持されるキーの型V- マップされる値の型
- すべてのスーパー・インタフェース:
Map<K,V>
- 既知のすべてのサブインタフェース:
ConcurrentNavigableMap<K,V>
- 既知のすべての実装クラス:
ConcurrentHashMap,ConcurrentSkipListMap
public interface ConcurrentMap<K,V> extends Map<K,V>
スレッドの安全性と原子性の保証を提供するMapです。指定された保証を維持するために、
Mapから継承したputIfAbsent(K, V)を含むメソッドのデフォルトの実装は、このインタフェースの実装でオーバーライドする必要があります。 同様に、メソッドMap.keySet()、Map.values()、およびMap.entrySet()によって返されるコレクションの実装は、必要に応じてアトミック性の保証を保持するために、removeIfなどのメソッドをオーバーライドする必要があります。メモリー整合性効果: ほかの並行処理コレクションと同様、オブジェクトをキーまたは値として
ConcurrentMapに配置する前のスレッド内のアクションは、別のスレッド内のそのオブジェクトへのアクセスまたはConcurrentMapからの削除に続くアクションの前に発生します。このインタフェースは、Java Collections Frameworkのメンバーです。
- 導入されたバージョン:
- 1.5
-
-
メソッドのサマリー
すべてのメソッド インスタンス・メソッド 抽象メソッド デフォルト・メソッド 修飾子と型 メソッド 説明 default Vcompute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)指定されたキーと現在マップされている値に対するマッピングの計算を試みます(現在のマッピングが存在しない場合はnull)。default VcomputeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)指定されたキーがまだ値に関連付けられていない(またはnullにマップされている)場合、指定されたマッピング関数を使用してその値の計算を試行し、nullでない場合はそれをこのマップに入力します。default VcomputeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)指定されたキーの値が存在していてnull以外の場合、キーと現在マップされている値から新しいマッピングの計算を試みます。default voidforEach(BiConsumer<? super K,? super V> action)このマップのすべてのエントリの処理が完了するかアクションから例外がスローされるまで、各エントリに対して指定されたアクションを実行します。default VgetOrDefault(Object key, V defaultValue)指定されたキーがマップされている値を返します。このマップにそのキーのマッピングが含まれていない場合はdefaultValueを返します。default Vmerge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)指定されたキーがまだ値と関連付けられていないかnullと関連付けられている場合、指定されたnull以外の値に関連付けます。VputIfAbsent(K key, V value)指定されたキーがまだ値と関連付けられていない場合は、指定された値に関連付けます。booleanremove(Object key, Object value)指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを削除します。Vreplace(K key, V value)キーが値に現在マッピングされている場合にのみ、そのキーのエントリを置換します。booleanreplace(K key, V oldValue, V newValue)指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを置換します。default voidreplaceAll(BiFunction<? super K,? super V,? extends V> function)すべてのエントリが処理されるか、または関数が例外をスローするまで、各エントリの値を、そのエントリで指定された関数を呼び出した結果で置換します。
-
-
-
メソッドの詳細
-
getOrDefault
default V getOrDefault(Object key, V defaultValue)
指定されたキーがマップされている値を返します。このマップにそのキーのマッピングが含まれていない場合はdefaultValueを返します。- 定義:
getOrDefault、インタフェース:Map<K,V>- 実装上の注意:
- この実装では、ConcurrentMapにnull値が含まれることはなく、
get()からnullが返された場合はキーが存在しないことを示すとみなされます。 null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。 - パラメータ:
key- 関連付けられた値が返されるキーdefaultValue- キーのデフォルト・マッピング- 戻り値:
- 指定されたキーがマップされている値。このマップにそのキーのマッピングが含まれていない場合は
defaultValue - 例外:
ClassCastException- このキーがこのマップに適さない型の場合(オプション)NullPointerException- 指定されたキーがnullであり、このマップがnullキーを許可しない場合(オプション)- 導入されたバージョン:
- 1.8
-
forEach
default void forEach(BiConsumer<? super K,? super V> action)
このマップのすべてのエントリの処理が完了するかアクションから例外がスローされるまで、各エントリに対して指定されたアクションを実行します。 実装クラスで指定されない場合は、エントリ・セットの反復の順序でアクションが実行されます(反復順序が指定されている場合)。 アクションによってスローされた例外は、呼出し側に中継されます。- 定義:
forEach、インタフェース:Map<K,V>- 実装要件:
- この
mapでは、デフォルト実装は次と同等です。for (Map.Entry<K,V> entry : map.entrySet()) { action.accept(entry.getKey(), entry.getValue()); } - 実装上の注意:
- デフォルト実装では、
getKey()またはgetValue()によってスローされたIllegalStateExceptionはエントリが削除され、処理できないことを示すとみなされます。 オペレーションは後続のエントリで続行されます。 - パラメータ:
action- 各エントリに対して実行されるアクション- 例外:
NullPointerException- 指定されたアクションがnullである場合- 導入されたバージョン:
- 1.8
-
putIfAbsent
V putIfAbsent(K key, V value)
指定されたキーがまだ値と関連付けられていない場合は、指定された値に関連付けます。 これは、このmapの場合と同じです:
ただし、アクションが原子的に実行される点が異なります。if (!map.containsKey(key)) return map.put(key, value); else return map.get(key);- 定義:
putIfAbsent、インタフェース:Map<K,V>- 実装上の注意:
- この実装は、
Mapで指定された不適切なデフォルトを意図的に再抽象化します。 - パラメータ:
key- 指定された値が関連付けられるキーvalue- 指定されたキーに関連付けられる値- 戻り値:
- 指定されたキーに関連付けられた以前の値。キーのマッピングがなかった場合は
null。 (また、実装がnull値をサポートしている場合、戻り値nullは、以前にマップでキーとnullが関連付けられていたことを示す場合もある。) - 例外:
UnsupportedOperationException-putオペレーションがこのマップでサポートされない場合ClassCastException- 指定されたキーまたは値のクラスが原因で、このマップに格納できない場合NullPointerException- このマップがnullキーやnull値を許可しないときに、指定されたキーまたは値がnullの場合IllegalArgumentException- 指定されたキーまたは値のあるプロパティが原因で、このマップに格納できない場合
-
remove
boolean remove(Object key, Object value)
指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを削除します。 これは、このmapの場合と同じです:
ただし、アクションが原子的に実行される点が異なります。if (map.containsKey(key) && Objects.equals(map.get(key), value)) { map.remove(key); return true; } else { return false; }- 定義:
remove、インタフェース:Map<K,V>- 実装上の注意:
- この実装は、
Mapで指定された不適切なデフォルトを意図的に再抽象化します。 - パラメータ:
key- 指定された値が関連付けられるキーvalue- 指定されたキーに関連付けられていると予想される値- 戻り値:
- 値が削除された場合は
true - 例外:
UnsupportedOperationException-removeオペレーションがこのマップでサポートされない場合ClassCastException- キーまたは値がこのマップに適さない型の場合(オプション)NullPointerException- 指定されたキーまたは値がnullであり、かつこのマップがnullのキーまたは値を許可しない場合(オプション)
-
replace
boolean replace(K key, V oldValue, V newValue)
指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを置換します。 これは、このmapの場合と同じです:
ただし、アクションが原子的に実行される点が異なります。if (map.containsKey(key) && Objects.equals(map.get(key), oldValue)) { map.put(key, newValue); return true; } else { return false; }- 定義:
replace、インタフェース:Map<K,V>- 実装上の注意:
- この実装は、
Mapで指定された不適切なデフォルトを意図的に再抽象化します。 - パラメータ:
key- 指定された値が関連付けられるキーoldValue- 指定されたキーに関連付けられていると予想される値newValue- 指定されたキーに関連付けられる値- 戻り値:
- 値が置換された場合は
true - 例外:
UnsupportedOperationException-putオペレーションがこのマップでサポートされない場合ClassCastException- 指定されたキーまたは値のクラスが原因で、このマップにそれを格納できない場合NullPointerException- 指定されたキーまたは値がnullであり、このマップがnullのキーまたは値を許可しない場合IllegalArgumentException- 指定されたキーまたは値のあるプロパティが原因で、それをこのマップに格納できない場合
-
replace
V replace(K key, V value)
キーが値に現在マッピングされている場合にのみ、そのキーのエントリを置換します。 これは、このmapの場合と同じです:
ただし、アクションが原子的に実行される点が異なります。if (map.containsKey(key)) return map.put(key, value); else return null;- 定義:
replace、インタフェース:Map<K,V>- 実装上の注意:
- この実装は、
Mapで指定された不適切なデフォルトを意図的に再抽象化します。 - パラメータ:
key- 指定された値が関連付けられるキーvalue- 指定されたキーに関連付けられる値- 戻り値:
- 指定されたキーに関連付けられた以前の値。キーのマッピングがなかった場合は
null。 (また、実装がnull値をサポートしている場合、戻り値nullは、以前にマップでキーとnullが関連付けられていたことを示す場合もある。) - 例外:
UnsupportedOperationException-putオペレーションがこのマップでサポートされない場合ClassCastException- 指定されたキーまたは値のクラスが原因で、このマップに格納できない場合NullPointerException- このマップがnullキーやnull値を許可しないときに、指定されたキーまたは値がnullの場合IllegalArgumentException- 指定されたキーまたは値のあるプロパティが原因で、このマップに格納できない場合
-
replaceAll
default void replaceAll(BiFunction<? super K,? super V,? extends V> function)
すべてのエントリが処理されるか、または関数が例外をスローするまで、各エントリの値を、そのエントリで指定された関数を呼び出した結果で置換します。 関数によってスローされた例外は、呼出し側に中継されます。- 定義:
replaceAll、インタフェース:Map<K,V>- 実装要件:
この
mapでは、デフォルト実装は次と同等です。
デフォルト実装は、複数のスレッドが更新を試行するときに、これらのステップを再試行する可能性があります。これには、特定のキーに関してこの関数が繰り返し呼び出される可能性も含まれます。for (Map.Entry<K,V> entry : map.entrySet()) { K k; V v; do { k = entry.getKey(); v = entry.getValue(); } while (!map.replace(k, v, function.apply(k, v))); }この実装では、ConcurrentMapにnull値が含まれることはなく、
get()からnullが返された場合はキーが存在しないことを示すとみなされます。 null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。- パラメータ:
function- 各エントリに適用する関数- 例外:
UnsupportedOperationException-setオペレーションがこのマップのエントリ・セット・イテレータでサポートされない場合。NullPointerException- 関数または置換値がnullであり、このマップでnullのキーまたは値が許可されない場合(オプション)ClassCastException- 置換値がこのマップに適さない型である場合(オプション)IllegalArgumentException- 置換値のなんらかのプロパティが原因で、それをこのマップに格納できない場合(オプション)- 導入されたバージョン:
- 1.8
-
computeIfAbsent
default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
指定されたキーがまだ値に関連付けられていない(または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);マッピング関数は、計算中にこのマップを変更すべきではありません。
- 定義:
computeIfAbsent、インタフェース:Map<K,V>- 実装要件:
- デフォルトの実装は、この
mapの次のステップと同じです:V oldValue, newValue; return ((oldValue = map.get(key)) == null && (newValue = mappingFunction.apply(key)) != null && (oldValue = map.putIfAbsent(key, newValue)) == null) ? newValue : oldValue;この実装では、ConcurrentMapにnull値が含まれることはなく、
get()からnullが返された場合はキーが存在しないことを示すとみなされます。 null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。 - パラメータ:
key- 指定された値が関連付けられるキーmappingFunction- 値をコンピュートするマッピング関数- 戻り値:
- 指定されたキーに関連付けられている現在の(既存の、または計算された)値。計算された値がnullである場合はnull
- 例外:
UnsupportedOperationException-putオペレーションがこのマップでサポートされない場合(オプション)ClassCastException- 指定されたキーまたは値のクラスが原因で、それをこのマップに格納できない場合(オプション)NullPointerException- 指定されたキーがnullであり、このマップがnullキーをサポートしない場合、またはmappingFunctionがnullである場合IllegalArgumentException- 指定されたキーまたは値のなんらかのプロパティが、それらがこのマップに格納されるのを妨げる場合(オプション)- 導入されたバージョン:
- 1.8
-
computeIfPresent
default V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
指定されたキーの値が存在していてnull以外の場合、キーと現在マップされている値から新しいマッピングの計算を試みます。リマッピング関数が
nullを返した場合、マッピングは削除されます。 再マップ関数自体が(unchecked)例外をスローすると、例外が再スローされ、現在のマッピングは変更されません。再マップ関数は、計算中にこのマップを変更すべきではありません。
- 定義:
computeIfPresent、インタフェース:Map<K,V>- 実装要件:
- デフォルトの実装は、この
mapに対して以下のステップを実行するのと同じです:
複数のスレッドが更新を試みると、マップ操作と再マッピング関数は複数回呼び出されることがあります。for (V oldValue; (oldValue = map.get(key)) != null; ) { V newValue = remappingFunction.apply(key, oldValue); if ((newValue == null) ? map.remove(key, oldValue) : map.replace(key, oldValue, newValue)) return newValue; } return null;この実装では、ConcurrentMapにnull値が含まれることはなく、
get()からnullが返された場合はキーが存在しないことを示すとみなされます。 null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。 - パラメータ:
key- 指定された値が関連付けられるキーremappingFunction- 値をコンピュートするための再マップ関数- 戻り値:
- 指定されたキーに関連付けられる新しい値。存在しない場合はnull
- 例外:
UnsupportedOperationException-putオペレーションがこのマップでサポートされない場合(オプション)ClassCastException- 指定されたキーまたは値のクラスが原因で、それをこのマップに格納できない場合(オプション)NullPointerException- 指定されたキーがnullであり、このマップがnullキーをサポートしない場合、またはremappingFunctionがnullである場合IllegalArgumentException- 指定されたキーまたは値のなんらかのプロパティが、それらがこのマップに格納されるのを妨げる場合(オプション)- 導入されたバージョン:
- 1.8
-
compute
default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
指定されたキーと現在マップされている値に対するマッピングの計算を試みます(現在のマッピングが存在しない場合はnull)。 たとえば、次のように、値のマッピングにStringmsgを作成または追加します。
(このような目的で使用するmap.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))merge()メソッドは、多くの場合、より単純です。)再マッピング関数が
nullを返した場合、マッピングは削除されます。(最初に欠席した場合は不在のままです)。 再マップ関数自体が(unchecked)例外をスローすると、例外が再スローされ、現在のマッピングは変更されません。再マップ関数は、計算中にこのマップを変更すべきではありません。
- 定義:
compute、インタフェース:Map<K,V>- 実装要件:
- デフォルトの実装は、この
mapに対して以下のステップを実行するのと同じです:
複数のスレッドが更新を試みると、マップ操作と再マッピング関数は複数回呼び出されることがあります。for (;;) { V oldValue = map.get(key); V newValue = remappingFunction.apply(key, oldValue); if (newValue != null) { if ((oldValue != null) ? map.replace(key, oldValue, newValue) : map.putIfAbsent(key, newValue) == null) return newValue; } else if (oldValue == null || map.remove(key, oldValue)) { return null; } }この実装では、ConcurrentMapにnull値が含まれることはなく、
get()からnullが返された場合はキーが存在しないことを示すとみなされます。 null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。 - パラメータ:
key- 指定された値が関連付けられるキーremappingFunction- 値をコンピュートするための再マップ関数- 戻り値:
- 指定されたキーに関連付けられる新しい値。存在しない場合はnull
- 例外:
UnsupportedOperationException-putオペレーションがこのマップでサポートされない場合(オプション)ClassCastException- 指定されたキーまたは値のクラスが原因で、それをこのマップに格納できない場合(オプション)NullPointerException- 指定されたキーがnullであり、このマップがnullキーをサポートしない場合、またはremappingFunctionがnullである場合IllegalArgumentException- 指定されたキーまたは値のなんらかのプロパティが、それらがこのマップに格納されるのを妨げる場合(オプション)- 導入されたバージョン:
- 1.8
-
merge
default V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
指定されたキーがまだ値と関連付けられていないかnullと関連付けられている場合、指定されたnull以外の値に関連付けます。 それ以外の場合は、指定された再マッピング関数の結果で関連する値を置換し、結果がnullの場合は削除します。 このメソッドは、1つのキーに対する複数のマップされた値を結合するときに使用できます。 たとえば、次のように、値のマッピングにString msgを作成または追加します。map.merge(key, msg, String::concat)リマッピング関数が
nullを返した場合、マッピングは削除されます。 再マップ関数自体が(unchecked)例外をスローすると、例外が再スローされ、現在のマッピングは変更されません。再マップ関数は、計算中にこのマップを変更すべきではありません。
- 定義:
merge、インタフェース:Map<K,V>- 実装要件:
- デフォルトの実装は、この
mapに対して以下のステップを実行するのと同じです:
複数のスレッドが更新を試みると、マップ操作と再マッピング関数は複数回呼び出されることがあります。for (;;) { V oldValue = map.get(key); if (oldValue != null) { V newValue = remappingFunction.apply(oldValue, value); if (newValue != null) { if (map.replace(key, oldValue, newValue)) return newValue; } else if (map.remove(key, oldValue)) { return null; } } else if (map.putIfAbsent(key, value) == null) { return value; } }この実装では、ConcurrentMapにnull値が含まれることはなく、
get()からnullが返された場合はキーが存在しないことを示すとみなされます。 null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。 - パラメータ:
key- 結果値が関連付けられるキーvalue- キーに関連付けられた既存の値にマージされるnull以外の値。既存の値がない場合、またはキーにnull値が関連付けられている場合は、キーに関連付けられるnull以外の値remappingFunction- 存在する場合に値を再計算するための再マッピング関数- 戻り値:
- 指定されたキーに関連付けられた新しい値。キーに値が関連付けられなかった場合はnull
- 例外:
UnsupportedOperationException-putオペレーションがこのマップでサポートされない場合(オプション)ClassCastException- 指定されたキーまたは値のクラスが原因で、それをこのマップに格納できない場合(オプション)NullPointerException- 指定されたキーがnullであり、このマップがnullキーをサポートしない場合、あるいは値またはremappingFunctionがnullである場合IllegalArgumentException- 指定されたキーまたは値のなんらかのプロパティが、それらがこのマップに格納されるのを妨げる場合(オプション)- 導入されたバージョン:
- 1.8
-
-