Интерфейс ConcurrentMap<K, V>
- Параметры типа:
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 в качестве ключа или значения, предшествуют по отношению happens-before действиям, выполняемым после доступа к этому объекту или его удаления из ConcurrentMap в другом потоке.
Этот интерфейс входит в Фреймворк коллекций Java.
- Начиная с:
- 1.5
Краткое описание вложенных классов
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
default V |
compute |
Пытается вычислить отображение для указанного ключа и его текущего отображаемого значения либо null, если текущее отображение отсутствует (необязательная операция). |
default V |
computeIfAbsent |
Если указанный ключ ещё не связан со значением (или ему сопоставлено null), пытается вычислить его значение с помощью заданной функции отображения и заносит его в эту карту, если только null (необязательная операция). |
default V |
computeIfPresent |
Если для указанного ключа имеется ненулевое значение, пытается вычислить новое отображение на основе ключа и его текущего отображаемого значения (необязательная операция). |
default void |
forEach |
Выполняет заданное действие для каждой записи в этой карте, пока не будут обработаны все записи или действие не вызовет исключение. |
default V |
getOrDefault |
Возвращает значение, сопоставленное указанному ключу, или defaultValue, если в этой карте нет отображения для ключа. |
default V |
merge |
Если указанный ключ ещё не связан со значением или связан со значением null, связывает его с заданным ненулевым значением (необязательная операция). |
V |
putIfAbsent |
Если указанный ключ ещё не связан со значением, связывает его с заданным значением. |
boolean |
remove |
Удаляет запись для ключа, только если в данный момент ему сопоставлено заданное значение. |
V |
replace |
Заменяет запись для ключа, только если в данный момент ему сопоставлено некоторое значение. |
boolean |
replace |
Заменяет запись для ключа, только если в данный момент ему сопоставлено заданное значение. |
default void |
replaceAll |
Заменяет значение каждой записи результатом вызова заданной функции для этой записи, пока не будут обработаны все записи или функция не вызовет исключение (необязательная операция). |
Методы, объявленные в интерфейсе Map
clear, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, values | Модификатор и тип | Метод | Описание |
|---|---|---|
void |
clear() |
Удаляет все отображения из этой карты (необязательная операция). |
boolean |
containsKey |
Возвращает true, если эта карта содержит отображение для указанного ключа. |
boolean |
containsValue |
Возвращает true, если в этой карте один или несколько ключей сопоставлены с указанным значением. |
Set |
entrySet() |
Возвращает представление Set отображений, содержащихся в этой карте. |
boolean |
equals |
Сравнивает указанный объект с этой картой на равенство. |
V |
get |
Возвращает значение, сопоставленное указанному ключу, или null, если в этой карте нет отображения для ключа. |
int |
hashCode() |
Возвращает значение хеш-кода этой карты. |
boolean |
isEmpty() |
Возвращает true, если эта карта не содержит пар «ключ-значение». |
Set |
keySet() |
Возвращает представление Set ключей, содержащихся в этой карте. |
V |
put |
Сопоставляет указанное значение с указанным ключом в этой карте (необязательная операция). |
void |
putAll |
Копирует все отображения из указанной карты в эту карту (необязательная операция). |
V |
remove |
Удаляет отображение ключа из этой карты, если оно существует (необязательная операция). |
int |
size() |
Возвращает количество пар «ключ-значение» в этой карте. |
Collection |
values() |
Возвращает представление Collection значений, содержащихся в этой карте. |
Подробное описание методов
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()); } - Примечание по реализации:
- В реализации по умолчанию предполагается, что
IllegalStateException, вызванноеgetKey()илиgetValue(), означает, что запись была удалена и не может быть обработана. Обработка последующих записей продолжается. - Параметры:
-
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 -
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 -
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- если эта карта не поддерживает операциюreplaceAll(необязательно) -
NullPointerException- если указанная функция равна null или если новое значение равно null, а эта карта не допускает значения null (необязательно) -
ClassCastException- если класс нового значения не позволяет сохранить его в этой карте (необязательно) -
IllegalArgumentException- если какое-либо свойство нового значения не позволяет сохранить его в этой карте (необязательно) - Начиная с:
- 1.8
computeIfAbsent
default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
null), пытается вычислить его значение с помощью заданной функции отображения и заносит его в эту карту, если только null (необязательная операция). Если функция отображения возвращает null, отображение не сохраняется. Если сама функция отображения вызывает (непроверяемое) исключение, оно повторно выбрасывается, а отображение не сохраняется. Чаще всего этот метод используется для создания нового объекта в качестве исходного отображаемого значения или мемоизированного результата, например:
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: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- если эта карта не поддерживает операциюcomputeIfAbsent(необязательно) -
ClassCastException- если класс указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) -
NullPointerException- если указанный ключ равен null, а эта карта не поддерживает ключи null, либо если mappingFunction равна null -
IllegalArgumentException- если какое-либо свойство указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) - Начиная с:
- 1.8
computeIfPresent
default V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Если функция переотображения возвращает null, отображение удаляется. Если сама функция переотображения вызывает (непроверяемое) исключение, оно повторно выбрасывается, а текущее отображение остаётся неизменным.
Функция переотображения не должна изменять эту карту во время вычисления.
- Определён в:
-
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- если эта карта не поддерживает операциюcomputeIfPresent(необязательно) -
ClassCastException- если класс указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) -
NullPointerException- если указанный ключ равен null, а эта карта не поддерживает ключи null, либо если remappingFunction равна null -
IllegalArgumentException- если какое-либо свойство указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) - Начиная с:
- 1.8
compute
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:
При попытках обновления из нескольких потоков операции с картой и функция переотображения могут вызываться несколько раз.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- если эта карта не поддерживает операциюcompute(необязательно) -
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. Этот метод может быть полезен при объединении нескольких значений, сопоставленных одному ключу. Например, чтобы создать новое значение или добавить String msg к отображению значения: map.merge(key, msg, String::concat)
Если функция переотображения возвращает null, отображение удаляется. Если сама функция переотображения вызывает (непроверяемое) исключение, оно повторно выбрасывается, а текущее отображение остаётся неизменным.
Функция переотображения не должна изменять эту карту во время вычисления.
- Определён в:
-
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 -
remappingFunction- функция переотображения для повторного вычисления значения, если оно имеется - Возвращает:
- новое значение, связанное с указанным ключом, или null, если с ключом не связано никакого значения
- Вызывает:
-
UnsupportedOperationException- если эта карта не поддерживает операциюmerge(необязательно) -
ClassCastException- если класс указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) -
NullPointerException- если указанный ключ равен null, а эта карта не поддерживает ключи null, либо если значение или remappingFunction равны null -
IllegalArgumentException- если какое-либо свойство указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) - Начиная с:
- 1.8
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.