- 型パラメータ:
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 V
compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
指定されたキーと現在マップされている値に対するマッピングの計算を試みます(現在のマッピングが存在しない場合はnull
)。default V
computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
指定されたキーがまだ値に関連付けられていない(またはnull
にマップされている)場合、指定されたマッピング関数を使用してその値の計算を試行し、null
でない場合はそれをこのマップに入力します。default V
computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
指定されたキーの値が存在していてnull以外の場合、キーと現在マップされている値から新しいマッピングの計算を試みます。default void
forEach(BiConsumer<? super K,? super V> action)
このマップのすべてのエントリの処理が完了するかアクションから例外がスローされるまで、各エントリに対して指定されたアクションを実行します。default V
getOrDefault(Object key, V defaultValue)
指定されたキーがマップされている値を返します。このマップにそのキーのマッピングが含まれていない場合はdefaultValue
を返します。default V
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
指定されたキーがまだ値と関連付けられていないかnullと関連付けられている場合、指定されたnull以外の値に関連付けます。V
putIfAbsent(K key, V value)
指定されたキーがまだ値と関連付けられていない場合は、指定された値に関連付けます。boolean
remove(Object key, Object value)
指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを削除します。V
replace(K key, V value)
キーが値に現在マッピングされている場合にのみ、そのキーのエントリを置換します。boolean
replace(K key, V oldValue, V newValue)
指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを置換します。default void
replaceAll(BiFunction<? super K,? super V,? extends V> function)
すべてのエントリが処理されるか、または関数が例外をスローするまで、各エントリの値を、そのエントリで指定された関数を呼び出した結果で置換します。
-
メソッドの詳細
-
getOrDefault
指定されたキーがマップされている値を返します。このマップにそのキーのマッピングが含まれていない場合はdefaultValue
を返します。- 定義:
- インタフェース
Map<K,V>
内のgetOrDefault
- 実装上の注意:
- この実装では、ConcurrentMapにnull値が含まれることはなく、
get()
からnullが返された場合はキーが存在しないことを示すとみなされます。 null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。 - パラメータ:
key
- 関連付けられた値が返されるキーdefaultValue
- キーのデフォルト・マッピング- 戻り値:
- 指定されたキーがマップされている値。このマップにそのキーのマッピングが含まれていない場合は
defaultValue
- 例外:
ClassCastException
- このキーがこのマップに適さない型の場合(オプション)NullPointerException
- 指定されたキーがnullであり、このマップがnullキーを許可しない場合(オプション)- 導入されたバージョン:
- 1.8
-
forEach
default void forEach(BiConsumer<? super K,? super V> action)このマップのすべてのエントリの処理が完了するかアクションから例外がスローされるまで、各エントリに対して指定されたアクションを実行します。 実装クラスで指定されない場合は、エントリ・セットの反復の順序でアクションが実行されます(反復順序が指定されている場合)。 アクションによってスローされた例外は、呼出し側に中継されます。- 定義:
- インタフェース
Map<K,V>
内のforEach
- 実装要件:
- この
map
では、デフォルト実装は次と同等です。for (Map.Entry<K,V> entry : map.entrySet()) { action.accept(entry.getKey(), entry.getValue()); }
- 実装上の注意:
- デフォルト実装では、
getKey()
またはgetValue()
によってスローされたIllegalStateException
はエントリが削除され、処理できないことを示すとみなされます。 オペレーションは後続のエントリで続行されます。 - パラメータ:
action
- 各エントリに対して実行されるアクション- 例外:
NullPointerException
- 指定されたアクションがnullである場合- 導入されたバージョン:
- 1.8
-
putIfAbsent
指定されたキーがまだ値と関連付けられていない場合は、指定された値に関連付けます。 これは、このmap
の場合と同じです:if (!map.containsKey(key)) return map.put(key, value); else return map.get(key);
- 定義:
- インタフェース
Map<K,V>
内のputIfAbsent
- 実装上の注意:
- この実装は、
Map
で指定された不適切なデフォルトを意図的に再抽象化します。 - パラメータ:
key
- 指定された値が関連付けられるキーvalue
- 指定されたキーに関連付けられる値- 戻り値:
- 指定されたキーに関連付けられた以前の値。キーのマッピングがなかった場合は
null
。 (また、実装がnull値をサポートしている場合、戻り値null
は、以前にマップでキーとnull
が関連付けられていたことを示す場合もある。) - 例外:
UnsupportedOperationException
-put
オペレーションがこのマップでサポートされない場合ClassCastException
- 指定されたキーまたは値のクラスが原因で、このマップにそれらを格納できない場合NullPointerException
- このマップがnullキーやnull値を許可しないときに、指定されたキーまたは値がnullの場合IllegalArgumentException
- 指定されたキーまたは値のあるプロパティが原因で、このマップにそれらを格納できない場合
-
remove
指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを削除します。 これは、このmap
の場合と同じです:if (map.containsKey(key) && Objects.equals(map.get(key), value)) { map.remove(key); return true; } else { return false; }
- 定義:
- インタフェース
Map<K,V>
内のremove
- 実装上の注意:
- この実装は、
Map
で指定された不適切なデフォルトを意図的に再抽象化します。 - パラメータ:
key
- 指定された値が関連付けられるキーvalue
- 指定されたキーに関連付けられていると予想される値- 戻り値:
- 値が削除された場合は
true
- 例外:
UnsupportedOperationException
-remove
オペレーションがこのマップでサポートされない場合ClassCastException
- キーまたは値がこのマップに適さない型の場合(オプション)NullPointerException
- 指定されたキーまたは値がnullであり、かつこのマップがnullのキーまたは値を許可しない場合(オプション)
-
replace
指定された値にキーが現在マッピングされている場合にのみ、そのキーのエントリを置換します。 これは、このmap
の場合と同じです:if (map.containsKey(key) && Objects.equals(map.get(key), oldValue)) { map.put(key, newValue); return true; } else { return false; }
- 定義:
- インタフェース
Map<K,V>
内のreplace
- 実装上の注意:
- この実装は、
Map
で指定された不適切なデフォルトを意図的に再抽象化します。 - パラメータ:
key
- 指定された値が関連付けられるキーoldValue
- 指定されたキーに関連付けられていると予想される値newValue
- 指定されたキーに関連付けられる値- 戻り値:
- 値が置換された場合は
true
- 例外:
UnsupportedOperationException
-put
オペレーションがこのマップでサポートされない場合ClassCastException
- 指定されたキーまたは値のクラスが原因で、このマップにそれを格納できない場合NullPointerException
- 指定されたキーまたは値がnullであり、このマップがnullのキーまたは値を許可しない場合IllegalArgumentException
- 指定されたキーまたは値のあるプロパティが原因で、それをこのマップに格納できない場合
-
replace
キーが値に現在マッピングされている場合にのみ、そのキーのエントリを置換します。 これは、このmap
の場合と同じです:if (map.containsKey(key)) return map.put(key, value); else return null;
- 定義:
- インタフェース
Map<K,V>
内のreplace
- 実装上の注意:
- この実装は、
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)すべてのエントリが処理されるか、または関数が例外をスローするまで、各エントリの値を、そのエントリで指定された関数を呼び出した結果で置換します。 関数によってスローされた例外は、呼出し側に中継されます。- 定義:
- インタフェース
Map<K,V>
内のreplaceAll
- 実装要件:
この
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
指定されたキーがまだ値に関連付けられていない(または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);
マッピング関数は、計算中にこのマップを変更すべきではありません。
- 定義:
- インタフェース
Map<K,V>
内のcomputeIfAbsent
- 実装要件:
- デフォルトの実装は、この
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
指定されたキーの値が存在していてnull以外の場合、キーと現在マップされている値から新しいマッピングの計算を試みます。リマッピング関数が
null
を返した場合、マッピングは削除されます。 再マップ関数自体が(unchecked)例外をスローすると、例外が再スローされ、現在のマッピングは変更されません。再マップ関数は、計算中にこのマップを変更すべきではありません。
- 定義:
- インタフェース
Map<K,V>
内のcomputeIfPresent
- 実装要件:
- デフォルトの実装は、この
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
指定されたキーと現在マップされている値に対するマッピングの計算を試みます(現在のマッピングが存在しない場合はnull
)。 たとえば、次のように、値のマッピングにString
msgを作成または追加します。map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
merge()
メソッドは、多くの場合、より単純です。)再マッピング関数が
null
を返した場合、マッピングは削除されます。(最初に欠席した場合は不在のままです)。 再マップ関数自体が(unchecked)例外をスローすると、例外が再スローされ、現在のマッピングは変更されません。再マップ関数は、計算中にこのマップを変更すべきではありません。
- 定義:
- インタフェース
Map<K,V>
内のcompute
- 実装要件:
- デフォルトの実装は、この
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
指定されたキーがまだ値と関連付けられていないかnullと関連付けられている場合、指定されたnull以外の値に関連付けます。 それ以外の場合は、指定された再マッピング関数の結果で関連する値を置換し、結果がnull
の場合は削除します。 このメソッドは、1つのキーに対する複数のマップされた値を結合するときに使用できます。 たとえば、次のように、値のマッピングにString msg
を作成または追加します。map.merge(key, msg, String::concat)
リマッピング関数が
null
を返した場合、マッピングは削除されます。 再マップ関数自体が(unchecked)例外をスローすると、例外が再スローされ、現在のマッピングは変更されません。再マップ関数は、計算中にこのマップを変更すべきではありません。
- 定義:
- インタフェース
Map<K,V>
内のmerge
- 実装要件:
- デフォルトの実装は、この
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
-