Spec-Zone.ru › OpenJDK 27

Интерфейс 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

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в интерфейсе Map

Map.Entry<K,V>
Модификатор и тип Интерфейс Описание
static interface  Map.Entry<K,V>
Запись карты (пара «ключ-значение»).

Краткое описание методов

Модификатор и тип Метод Описание
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)
Если для указанного ключа имеется ненулевое значение, пытается вычислить новое отображение на основе ключа и его текущего отображаемого значения (необязательная операция).
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, связывает его с заданным ненулевым значением (необязательная операция).
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)
Заменяет значение каждой записи результатом вызова заданной функции для этой записи, пока не будут обработаны все записи или функция не вызовет исключение (необязательная операция).

Методы, объявленные в интерфейсе Map

clear, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, values
Модификатор и тип Метод Описание
void clear()
Удаляет все отображения из этой карты (необязательная операция).
boolean containsKey(Object key)
Возвращает true, если эта карта содержит отображение для указанного ключа.
boolean containsValue(Object value)
Возвращает true, если в этой карте один или несколько ключей сопоставлены с указанным значением.
Set<Map.Entry<K,V>> entrySet()
Возвращает представление Set отображений, содержащихся в этой карте.
boolean equals(Object o)
Сравнивает указанный объект с этой картой на равенство.
V get(Object key)
Возвращает значение, сопоставленное указанному ключу, или null, если в этой карте нет отображения для ключа.
int hashCode()
Возвращает значение хеш-кода этой карты.
boolean isEmpty()
Возвращает true, если эта карта не содержит пар «ключ-значение».
Set<K> keySet()
Возвращает представление Set ключей, содержащихся в этой карте.
V put(K key, V value)
Сопоставляет указанное значение с указанным ключом в этой карте (необязательная операция).
void putAll(Map<? extends K, ? extends V> m)
Копирует все отображения из указанной карты в эту карту (необязательная операция).
V remove(Object key)
Удаляет отображение ключа из этой карты, если оно существует (необязательная операция).
int size()
Возвращает количество пар «ключ-значение» в этой карте.
Collection<V> 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, связывает его с заданным ненулевым значением (необязательная операция). В противном случае заменяет связанное значение результатом заданной функции переотображения или удаляет его, если результат равен 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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее дочерних компаний в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065, США.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API