K -钥匙的Map保持型
V -映射的值的类型
public interface ConcurrentMap<K,V> extends Map<K,V>
Map提供线程安全性和原子性的保证。
内存一致性效果:与其他并发集合,在将对象放入一个ConcurrentMap作为一个键或值happen-before行动访问或从另一个线程中的对象的ConcurrentMap去除前一个线程的行为。
该接口的 Java Collections Framework成员。
| Modifier and Type | Method and Description |
|---|---|
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),尝试使用给定的映射功能,进入到这个Map除非
null计算其价值。
|
default V |
computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
如果指定键的值是存在和非空的,尝试计算一个新的映射,给出了键和它当前的映射值。
|
default void |
forEach(BiConsumer<? super K,? super V> action)
在该映射中的每个条目执行给定的操作,直到所有的条目被处理或操作抛出异常。
|
default V |
getOrDefault(Object key, V defaultValue)
返回指定的键映射的值,或
defaultValue如果这个Map不包含的键映射。
|
default V |
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
如果指定的键已与值相关联的值或与空值相关联的,则将其与给定的非空值关联。
|
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如果这个Map不包含的键映射。
getOrDefault 接口
Map<K,V>
get()明确意味着重点不在。实现支持空值
必须重写此默认实现。
key -关键的相关值被返回
defaultValue -键的默认映射
defaultValue如果这个Map不包含的键映射
ClassCastException如果关键是这张图的不恰当的类型(
optional)
NullPointerException -如果指定的键是无效的,这张Map不允许null键(
optional)
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());
IllegalStateException
getKey()或
getValue()抛出表明条目已被删除,不能被处理。操作继续为后续的条目。
action将每项执行的动作
NullPointerException -如果指定动作是无效的
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返回也表明,与先前的
nullMap的关键,如果实施支持空值。)
UnsupportedOperationException -如果
put操作不该Map支持
ClassCastException如果类指定的键或值防止它被存储在这个Map
NullPointerException -如果指定的键或值是null,这Map不允许null键或值
IllegalArgumentException如果一些属性指定的键或值防止它被存储在这个Map
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操作不该Map支持
ClassCastException如果键或值是此Map不合适的类型(
optional)
NullPointerException -如果指定的键或值是null,这Map不允许null键或值(
optional)
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操作不该Map支持
ClassCastException如果类指定的键或值,防止它被存储在这个Map
NullPointerException -如果指定的键或值是null,这Map不允许null键或值
IllegalArgumentException如果一些属性指定的键或值,防止它被存储在这个Map
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返回也表明,与先前的
nullMap的关键,如果实施支持空值。)
UnsupportedOperationException -如果
put操作不该Map支持
ClassCastException如果类指定的键或值防止它被存储在这个Map
NullPointerException -如果指定的键或值是null,这Map不允许null键或值
IllegalArgumentException如果一些属性指定的键或值防止它被存储在这个Map
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()明确意味着重点不在。实现支持空值必须重写此默认实现。
function -功能适用于每一个条目
UnsupportedOperationException -如果
set操作不该Map的输入迭代器支持集。
NullPointerException如果函数或替换值是null,这Map不允许null键或值(
optional)
ClassCastException如果替换值是此Map不合适的类型(
optional)
IllegalArgumentException如果替换值的一些性质防止它被存储在这个Map(
optional)
default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
null),尝试使用给定的映射功能,进入到这个Map除非
null计算其价值。
如果函数返回null没有映射记录。如果函数抛出一个(没有)异常,异常会被重新抛出,没有映射记录。最常见的用法是构造一个新对象作为初始映射值或memoized的结果,如:
map.computeIfAbsent(key, k -> new Value(f(k)));
或者为了实现多值映射,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()明确意味着重点不在。实现支持空值必须重写此默认实现。
key键与指定的值是相关联的
mappingFunction的函数来计算一个值
UnsupportedOperationException -如果
put操作不该Map支持(
optional)
ClassCastException如果类指定的键或值防止它被存储在这个Map(
optional)
NullPointerException -如果指定的键是无效的,这张Map不支持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()明确意味着重点不在。实现支持空值必须重写此默认实现。
key键与指定的值是相关联的
remappingFunction的函数来计算一个值
UnsupportedOperationException -如果
put操作不该Map支持(
optional)
ClassCastException如果类指定的键或值防止它被存储在这个Map(
optional)
NullPointerException -如果指定的键是无效的,这张Map不支持null键,或remappingfunction是空的
default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
null如果没有当前映射)。例如,可以创建或追加
String味精到值的映射:
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()明确意味着重点不在。实现支持空值必须重写此默认实现。
key键与指定的值是相关联的
remappingFunction的函数来计算一个值
UnsupportedOperationException -如果
put操作不该Map支持(
optional)
ClassCastException如果类指定的键或值防止它被存储在这个Map(
optional)
NullPointerException -如果指定的键是无效的,这张Map不支持null键,或remappingfunction是空的
default V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
null。此方法可以将多个映射值组合在一个键时使用。例如,可以创建或追加
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()明确意味着重点不在。实现支持空值必须重写此默认实现。
key键,得到的值是相关联的
value -非空值是与存在价值的关键或相关的合并,如果没有存在的价值或空值与密钥相关的,是与密钥相关的
remappingFunction -函数重新计算值如果存在
UnsupportedOperationException -如果
put操作不该Map支持(
optional)
ClassCastException如果类指定的键或值防止它被存储在这个Map(
optional)
NullPointerException -如果指定的键是无效的,这张Map不支持null键或值或remappingfunction是空的
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.