Интерфейс ConcurrentMap<K,V>
- Параметры типа:
-
K- тип ключей, поддерживаемых этой картой -
V- тип сопоставленных значений
- Все суперинтерфейсы:
- Map<K,V>
- Все известные подинтерфейсы:
- ConcurrentNavigableMap<K,V>
- Все известные реализующие классы:
- ConcurrentHashMap, ConcurrentSkipListMap
public interface ConcurrentMap<K,V> extends Map<K,V>
A Map обеспечивающая безопасность потоков и гарантии атомности.
Влияние согласованности памяти: Как и в других коллекциях с одновременным доступом, действия в потоке до помещения объекта в ConcurrentMap в качестве ключа или значения предшествуют действиям, последующим за доступом или удалением этого объекта из ConcurrentMap в другом потоке.
Этот интерфейс является членом Java Collections Framework.
- С:
- 1.5
Вложенные классы
Вложенные классы/интерфейсы, унаследованные от интерфейса java.util.Map
Map.Entry<K,V> Методы
| Модификатор и тип | Метод и описание |
|---|---|
default V |
compute(K key,
BiFunction<? super K,? super V,? extends V> remappingFunction) Попытка вычислить сопоставление для указанного ключа и его текущего сопоставленного значения (или |
default V |
computeIfAbsent(K key,
Function<? super K,? extends V> mappingFunction) Если указанный ключ еще не связан со значением (или связан с |
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) Возвращает значение, которому сопоставлен указанный ключ, или |
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) Заменяет значение каждой записи результатом вызова заданной функции для этой записи до тех пор, пока все записи не будут обработаны или функция не выбросит исключение. |
Методы, унаследованные от интерфейса java.util.Map
clear, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, values Методы
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) Если указанный ключ еще не связан со значением, свяжите его с заданным значением. Это эквивалентно
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) Удаляет запись для ключа только в том случае, если она в данный момент сопоставлена с заданным значением. Это эквивалентно
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) Заменяет запись для ключа только в том случае, если она в данный момент сопоставлена с заданным значением. Это эквивалентно
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) Заменяет запись для ключа только в том случае, если она в данный момент сопоставлена с каким-либо значением. Это эквивалентно
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()) 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- если какое-либо свойство значения замены препятствует его хранению в этой карте (необязательно) - С:
- 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, затем возвращает текущее значение илиnullесли его сейчас нет:if (map.get(key) == null) { V newValue = mappingFunction.apply(key); if (newValue != null) return map.putIfAbsent(key, newValue); }Реализация по умолчанию может повторить эти шаги, когда несколько потоков пытаются выполнить обновления, в том числе потенциально вызывая функцию отображения несколько раз.Эта реализация предполагает, что ConcurrentMap не может содержать нулевые значения и
get()возвращение null однозначно означает, что ключ отсутствует. Реализации, которые поддерживают нулевые значения, обязаны переопределить эту реализацию по умолчанию. - Параметры:
-
key- ключ, с которым должно быть связано указанное значение -
mappingFunction- функция для вычисления значения - Возвращает:
- текущее (существующее или вычисленное) значение, связанное с указанным ключом, или null, если вычисленное значение равно null
- Выбрасывает:
-
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения не позволяет ему храниться в этой карте (необязательно) -
NullPointerException- если указанный ключ равен null, и эта карта не поддерживает нулевые ключи, или функция mappingFunction равна null - С момента:
- 1.8
computeIfPresent
default V computeIfPresent(K key,
BiFunction<? super K,? super V,? extends V> remappingFunction) Если значение для указанного ключа присутствует и не равно null, пытается вычислить новое отображение, учитывая ключ и его текущее сопоставленное значение.
Если функция возвращает 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 не может содержать нулевые значения и
get()возвращение null однозначно означает, что ключ отсутствует. Реализации, которые поддерживают нулевые значения, обязаны переопределить эту реализацию по умолчанию. - Параметры:
-
key- ключ, с которым должно быть связано указанное значение -
remappingFunction- функция для вычисления значения - Возвращает:
- новое значение, связанное с указанным ключом, или null, если такого нет
- Выбрасывает:
-
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения не позволяет ему храниться в этой карте (необязательно) -
NullPointerException- если указанный ключ равен null, и эта карта не поддерживает нулевые ключи, или функция remappingFunction равна null - С момента:
- 1.8
compute
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 не может содержать нулевые значения и
get()возвращение null однозначно означает, что ключ отсутствует. Реализации, которые поддерживают нулевые значения, обязаны переопределить эту реализацию по умолчанию. - Параметры:
-
key- ключ, с которым должно быть связано указанное значение -
remappingFunction- функция для вычисления значения - Возвращает:
- новое значение, связанное с указанным ключом, или null, если такого нет
- Выбрасывает:
-
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения не позволяет ему храниться в этой карте (необязательно) -
NullPointerException- если указанный ключ равен null, и эта карта не поддерживает нулевые ключи, или функция remappingFunction равна null - С момента:
- 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, затем возвращает текущее значение или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 не может содержать нулевые значения и
get()возвращение null однозначно означает, что ключ отсутствует. Реализации, которые поддерживают нулевые значения, обязаны переопределить эту реализацию по умолчанию. - Параметры:
-
key- ключ, с которым должно быть связано результирующее значение -
value- ненулевое значение, которое должно быть объединено с существующим значением, связанным с ключом, или, если нет существующего значения или значение равно null, которое должно быть связано с ключом -
remappingFunction- функция для повторного вычисления значения, если оно присутствует - Возвращает:
- новое значение, связанное с указанным ключом, или null, если значение не связано с ключом
- Выбрасывает:
-
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения не позволяет ему храниться в этой карте (необязательно) -
NullPointerException- если указанный ключ равен null, и эта карта не поддерживает нулевые ключи, или значение или remappingFunction равно null - С момента:
- 1.8
© 1993, 2020, 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.