K
- このマップで保持されるキーの型V
- マップされる値の型public interface ConcurrentMap<K,V> extends Map<K,V>
Map
です。
メモリー整合性効果: ほかの並行処理コレクションと同様、オブジェクトをキーまたは値としてConcurrentMap
に配置する前のスレッド内のアクションは、別のスレッド内のそのオブジェクトへのアクセスまたはConcurrentMap
からの削除に続くアクションの前に発生します。
このインタフェースは、Java Collections Frameworkのメンバーです。
修飾子と型 | メソッドと説明 |
---|---|
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)
すべてのエントリが処理されるか、または関数が例外をスローするまで、各エントリの値を、そのエントリで指定された関数を呼び出した結果で置換します。
|
default V getOrDefault(Object key, V defaultValue)
defaultValue
を返します。getOrDefault
、インタフェース: Map<K,V>
get()
からnullが返された場合はキーが存在しないことを示すとみなされます。null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。key
- 関連付けられた値が返されるキーdefaultValue
- キーのデフォルト・マッピングdefaultValue
ClassCastException
- このキーがこのマップに適さない型の場合(オプション)NullPointerException
- 指定されたキーがnullであり、このマップがnullキーを許可しない場合(オプション)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である場合V putIfAbsent(K key, V value)
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
- 指定されたキーまたは値のあるプロパティが原因で、このマップに格納できない場合boolean remove(Object key, Object value)
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のキーまたは値を許可しない場合(省略可能)boolean replace(K key, V oldValue, V newValue)
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
- 指定されたキーまたは値のあるプロパティが原因で、それをこのマップに格納できない場合V replace(K key, V value)
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
- 指定されたキーまたは値のあるプロパティが原因で、このマップに格納できない場合default void replaceAll(BiFunction<? super K,? super V,? extends V> function)
replaceAll
、インタフェース: Map<K,V>
このmap
では、デフォルト実装は次と同等です。
for ((Map.Entry<K, V> entry : map.entrySet())
do {
K k = entry.getKey();
V v = entry.getValue();
} while(!replace(k, v, function.apply(k, v)));
デフォルト実装は、複数のスレッドが更新を試行するときに、これらのステップを再試行する可能性があります。これには、特定のキーに関してこの関数が繰り返し呼び出される可能性も含まれます。
この実装では、ConcurrentMapにnull値が含まれることはなく、get()
からnullが返された場合はキーが存在しないことを示すとみなされます。null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。
function
- 各エントリに適用する関数UnsupportedOperationException
- set
オペレーションがこのマップのエントリ・セット・イテレータでサポートされない場合。NullPointerException
- 関数または置換値がnullであり、このマップでnullのキーまたは値が許可されない場合(オプション)ClassCastException
- 置換値がこのマップに適さない型である場合(オプション)IllegalArgumentException
- 置換値のなんらかのプロパティが原因で、それをこのマップに格納できない場合(オプション)default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
null
にマップされている)場合、指定されたマッピング関数を使用してその値の計算を試行し、null
でない場合はそれをこのマップに入力します。
関数がnull
を返した場合、マッピングは記録されません。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、マッピングは記録されません。もっとも一般的な用途は、次のように初期のマップされた値またはメモ化された結果として機能する新しいオブジェクトを構築することです。
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
の次のステップと同等であり、その後現在の値を返します。存在しない場合はnull
を返します。
if (map.get(key) == null) {
V newValue = mappingFunction.apply(key);
if (newValue != null)
return map.putIfAbsent(key, newValue);
}
デフォルト実装は、複数のスレッドが更新を試行するときに、これらのステップを再試行する可能性があります。これには、マッピング関数が複数回呼び出される可能性も含まれます。
この実装では、ConcurrentMapにnull値が含まれることはなく、get()
からnullが返された場合はキーが存在しないことを示すとみなされます。null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。
key
- 指定された値が関連付けられるキーmappingFunction
- 値を計算するための関数UnsupportedOperationException
- put
オペレーションがこのマップでサポートされない場合(オプション)ClassCastException
- 指定されたキーまたは値のクラスが原因で、それをこのマップに格納できない場合(オプション)NullPointerException
- 指定されたキーがnullであり、このマップがnullキーをサポートしない場合、またはmappingFunctionがnullである場合default V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
関数がnull
を返した場合、マッピングは削除されます。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、現在のマッピングは変更されません。
computeIfPresent
、インタフェース: Map<K,V>
map
の次のステップの実行と同等であり、その後現在の値を返します。現在存在しない場合はnull
を返します。
if (map.get(key) != null) {
V oldValue = map.get(key);
V newValue = remappingFunction.apply(key, oldValue);
if (newValue != null)
map.replace(key, oldValue, newValue);
else
map.remove(key, oldValue);
}
デフォルト実装は、複数のスレッドが更新を試行するときに、これらのステップを再試行する可能性があります。これには、再マッピング関数が複数回呼び出される可能性も含まれます。
この実装では、ConcurrentMapにnull値が含まれることはなく、get()
からnullが返された場合はキーが存在しないことを示すとみなされます。null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。
key
- 指定された値が関連付けられるキーremappingFunction
- 値を計算するための関数UnsupportedOperationException
- put
オペレーションがこのマップでサポートされない場合(オプション)ClassCastException
- 指定されたキーまたは値のクラスが原因で、それをこのマップに格納できない場合(オプション)NullPointerException
- 指定されたキーがnullであり、このマップがnullキーをサポートしない場合、またはremappingFunctionがnullである場合default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
null
)。たとえば、次のように、値のマッピングにString
msgを作成または追加します。
map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
(このような目的で使用するmerge()
メソッドは、多くの場合、より単純です。)
関数がnull
を返した場合、マッピングは削除されます(最初から存在しない場合は、存在しないままです)。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、現在のマッピングは変更されません。
compute
、インタフェース: Map<K,V>
map
の次のステップの実行と同等であり、その後現在の値を返します。存在しない場合はnull
を返します。
V oldValue = map.get(key);
V newValue = remappingFunction.apply(key, oldValue);
if (oldValue != null ) {
if (newValue != null)
map.replace(key, oldValue, newValue);
else
map.remove(key, oldValue);
} else {
if (newValue != null)
map.putIfAbsent(key, newValue);
else
return null;
}
デフォルト実装は、複数のスレッドが更新を試行するときに、これらのステップを再試行する可能性があります。これには、再マッピング関数が複数回呼び出される可能性も含まれます。
この実装では、ConcurrentMapにnull値が含まれることはなく、get()
からnullが返された場合はキーが存在しないことを示すとみなされます。null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。
key
- 指定された値が関連付けられるキーremappingFunction
- 値を計算するための関数UnsupportedOperationException
- put
オペレーションがこのマップでサポートされない場合(オプション)ClassCastException
- 指定されたキーまたは値のクラスが原因で、それをこのマップに格納できない場合(オプション)NullPointerException
- 指定されたキーがnullであり、このマップがnullキーをサポートしない場合、またはremappingFunctionがnullである場合default V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
null
の場合は削除します。このメソッドは、1つのキーに対する複数のマップされた値を結合するときに使用できます。たとえば、次のように、値のマッピングにString msg
を作成または追加します。
map.merge(key, msg, String::concat)
関数がnull
を返した場合、マッピングは削除されます。関数自体が(非チェック)例外をスローした場合、その例外は再スローされ、現在のマッピングは変更されません。
merge
、インタフェース: Map<K,V>
map
の次のステップの実行と同等であり、その後現在の値を返します。存在しない場合はnull
を返します。
V oldValue = map.get(key);
V newValue = (oldValue == null) ? value :
remappingFunction.apply(oldValue, value);
if (newValue == null)
map.remove(key);
else
map.put(key, newValue);
デフォルト実装は、複数のスレッドが更新を試行するときに、これらのステップを再試行する可能性があります。これには、再マッピング関数が複数回呼び出される可能性も含まれます。
この実装では、ConcurrentMapにnull値が含まれることはなく、get()
からnullが返された場合はキーが存在しないことを示すとみなされます。null値をサポートする実装は、このデフォルト実装をオーバーライドする必要があります。
key
- 結果値が関連付けられるキーvalue
- キーに関連付けられた既存の値にマージされるnull以外の値。既存の値がない場合、またはキーにnull値が関連付けられている場合は、キーに関連付けられるnull以外の値remappingFunction
- 値が存在する場合に値を再計算するための関数UnsupportedOperationException
- put
オペレーションがこのマップでサポートされない場合(オプション)ClassCastException
- 指定されたキーまたは値のクラスが原因で、それをこのマップに格納できない場合(オプション)NullPointerException
- 指定されたキーがnullであり、このマップがnullキーをサポートしない場合、あるいは値またはremappingFunctionがnullである場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.