Интерфейс Map<K,V>
- Параметры типа:
-
K- тип ключей, поддерживаемых этой картой -
V- тип сопоставленных значений
- Все известные подинтерфейсы:
- Bindings, ConcurrentMap<K,V>, ConcurrentNavigableMap<K,V>, LogicalMessageContext, MessageContext, NavigableMap<K,V>, SOAPMessageContext, SortedMap<K,V>
- Все известные реализующие классы:
- AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap
public interface Map<K,V>
Объект, сопоставляющий ключи со значениями. Карта не может содержать дублирующих ключей; каждый ключ может сопоставляться с не более чем одним значением.
Этот интерфейс заменяет класс Dictionary, который был совершенно абстрактным классом, а не интерфейсом.
Интерфейс Map предоставляет три представления коллекций, которые позволяют просматривать содержимое карты как множество ключей, коллекцию значений или множество пар "ключ-значение". Порядок карты определяется порядком, в котором итераторы представлений коллекций карты возвращают свои элементы. Некоторые реализации карт, такие как класс TreeMap, гарантируют определённый порядок; другие, например, класс HashMap, такого порядка не гарантируют.
Примечание: необходимо проявлять особую осторожность, если в качестве ключей карты используются изменяемые объекты. Поведение карты не определено, если значение объекта изменяется таким образом, что влияет на сравнения equals в то время, когда объект является ключом в карте. Особо важным случаем этого запрета является то, что карта не может содержать саму себя в качестве ключа. Хотя карта может содержать саму себя в качестве значения, рекомендуется крайняя осторожность: методы equals и hashCode для такой карты больше не определены должным образом.
Все реализации карт общего назначения должны предоставлять два «стандартных» конструктора: конструктор без аргументов, создающий пустую карту, и конструктор с одним аргументом типа Map, создающий новую карту с теми же парами «ключ-значение», что и у аргумента. По сути, последний конструктор позволяет пользователю копировать любую карту, создавая эквивалентную карту желаемого класса. Нет способа обеспечить соблюдение этого рекомендации (так как интерфейсы не могут содержать конструкторы), но все реализации карт общего назначения в JDK соответствуют ему.
«Деструктивные» методы, содержащиеся в этом интерфейсе, то есть методы, которые изменяют карту, на которой они работают, определены как такие, которые выбрасывают UnsupportedOperationException, если эта карта не поддерживает операцию. В этом случае эти методы могут, но не обязаны, выбросить UnsupportedOperationException, если вызов не окажет никакого эффекта на карту. Например, вызов метода putAll(Map) на неизменяемой карте может, но не обязан, выбросить исключение, если карта, чьи отображения должны быть «наложены», пуста.
Некоторые реализации карт имеют ограничения на ключи и значения, которые они могут содержать. Например, некоторые реализации запрещают null-ключи и значения, а некоторые имеют ограничения на типы своих ключей. Попытка вставить недопустимый ключ или значение приводит к выбросу необработанного исключения, обычно NullPointerException или ClassCastException. Попытка запросить наличие недопустимого ключа или значения может привести к выбросу исключения или просто вернуть false; некоторые реализации будут демонстрировать первое поведение, а некоторые — второе. Более общо, попытка операции с недопустимым ключом или значением, завершение которой не приведёт к вставке недопустимого элемента в карту, может привести к выбросу исключения или может завершиться успешно, по усмотрению реализации. Такие исключения отмечены как «необязательные» в спецификации этого интерфейса.
Многие методы в интерфейсах Collections Framework определены с точки зрения метода equals. Например, спецификация для метода containsKey(Object key) гласит: «возвращает true тогда и только тогда, когда эта карта содержит отображение для ключа k такого, что (key==null ? k==null : key.equals(k))». Эта спецификация не должна интерпретироваться как утверждение о том, что вызов Map.containsKey с не-null аргументом key приведет к вызову key.equals(k) для любого ключа k. Реализации могут свободно реализовывать оптимизации, при которых вызов equals избегается, например, путём предварительного сравнения кодов хеширования двух ключей. (Спецификация Object.hashCode() гарантирует, что два объекта с разными кодами хеширования не могут быть равны.) Более общо, реализации различных интерфейсов Collections Framework могут использовать указанное поведение методов базовых Object методов там, где реализатор сочтёт это уместным.
Некоторые операции с картой, выполняющие рекурсивное обход карты, могут завершиться исключением для самоссылочных экземпляров, где карта непосредственно или косвенно содержит саму себя. Это включает в себя методы clone(), equals(), hashCode() и toString(). Реализации могут по желанию обрабатывать сценарий самоссылок, однако большинство текущих реализаций этого не делают.
Этот интерфейс является членом Java Collections Framework.
- С:
- 1.2
- См. также:
-
HashMap,TreeMap,Hashtable,SortedMap,Collection,Set
Вложенные классы
| Модификатор и тип | Интерфейс и описание |
|---|---|
static interface |
Map.Entry<K,V> Элемент карты (пара «ключ-значение»). |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
void |
clear() Удаляет все сопоставления из этого отображения (необязательная операция). |
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, попытка вычислить новое сопоставление, учитывая ключ и его текущее сопоставленное значение. |
boolean |
containsKey(Object key) Возвращает |
boolean |
containsValue(Object value) Возвращает |
Set<Map.Entry<K,V>> |
entrySet() Возвращает отображение |
boolean |
equals(Object o) Сравнивает указанный объект с этим отображением на равенство. |
default void |
forEach(BiConsumer<? super K,? super V> action) Выполняет данное действие для каждой записи в этом отображении до тех пор, пока все записи не будут обработаны или действие не выбросит исключение. |
V |
get(Object key) Возвращает значение, которому сопоставлен указанный ключ, или |
default V |
getOrDefault(Object key,
V defaultValue) Возвращает значение, которому сопоставлен указанный ключ, или |
int |
hashCode() Возвращает значение хэш-кода для этого отображения. |
boolean |
isEmpty() Возвращает |
Set<K> |
keySet() Возвращает отображение |
default V |
merge(K key,
V value,
BiFunction<? super V,? super V,? extends V> remappingFunction) Если указанный ключ ещё не связан со значением или связан с null, связывает его с заданным ненулевым значением. |
V |
put(K key,
V value) Связывает указанное значение с указанным ключом в этом отображении (необязательная операция). |
void |
putAll(Map<? extends K,? extends V> m) Копирует все сопоставления из указанного отображения в это отображение (необязательная операция). |
default V |
putIfAbsent(K key,
V value) Если указанный ключ ещё не связан со значением (или сопоставлен с |
V |
remove(Object key) Удаляет сопоставление для ключа из этого отображения, если оно присутствует (необязательная операция). |
default boolean |
remove(Object key,
Object value) Удаляет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена с указанным значением. |
default V |
replace(K key,
V value) Заменяет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена с каким-либо значением. |
default boolean |
replace(K key,
V oldValue,
V newValue) Заменяет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена с указанным значением. |
default void |
replaceAll(BiFunction<? super K,? super V,? extends V> function) Заменяет значение каждой записи результатом вызова данной функции для этой записи до тех пор, пока все записи не будут обработаны или функция не выбросит исключение. |
int |
size() Возвращает количество сопоставлений ключ-значение в этом отображении. |
Collection<V> |
values() Возвращает отображение |
Методы
size
int size()
Возвращает количество пар ключ-значение в этом отображении. Если отображение содержит более Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE.
- Возвращает:
- количество пар ключ-значение в этом отображении
isEmpty
boolean isEmpty()
Возвращает true, если это отображение не содержит пар ключ-значение.
- Возвращает:
-
true, если это отображение не содержит пар ключ-значение
containsKey
boolean containsKey(Object key)
Возвращает true, если это отображение содержит сопоставление для указанного ключа. Более формально, возвращает true тогда и только тогда, когда это отображение содержит сопоставление для ключа k такого, что (key==null ? k==null : key.equals(k)). (Может быть не более одного такого сопоставления.)
- Параметры:
-
key- ключ, присутствие которого в этом отображении нужно проверить - Возвращает:
-
true, если это отображение содержит сопоставление для указанного ключа - Исключения:
-
ClassCastException- если ключ неподходящего типа для этого отображения (необязательно) -
NullPointerException- если указанный ключ равен null, и это отображение не допускает null-ключей (необязательно)
containsValue
boolean containsValue(Object value)
Возвращает true, если это отображение сопоставляет один или несколько ключей со значением. Более формально, возвращает true тогда и только тогда, когда это отображение содержит как минимум одно сопоставление со значением v такое, что (value==null ? v==null : value.equals(v)). Для большинства реализаций интерфейса Map эта операция, вероятно, потребует времени, линейного относительно размера отображения.
- Параметры:
-
value- значение, присутствие которого в этом отображении нужно проверить - Возвращает:
-
true, если это отображение сопоставляет один или несколько ключей со значением - Исключения:
-
ClassCastException- если значение неподходящего типа для этого отображения (необязательно) -
NullPointerException- если указанное значение равно null, и это отображение не допускает null-значений (необязательно)
get
V get(Object key)
Возвращает значение, которому сопоставлен указанный ключ, или null если в этом отображении нет сопоставления для ключа.
Более формально, если это отображение содержит сопоставление от ключа k к значению v такое, что (key==null ? k==null :
key.equals(k)), то этот метод возвращает v; в противном случае он возвращает null. (Может быть не более одного такого сопоставления.)
Если это отображение допускает null-значения, то возвращаемое значение null не обязательно указывает, что отображение не содержит сопоставления для ключа; также возможно, что отображение явно сопоставляет ключ со значением null. Операция containsKey может использоваться для различения этих двух случаев.
- Параметры:
-
key- ключ, ассоциированное значение которого требуется вернуть - Возвращает:
- значение, которому сопоставлен указанный ключ, или
nullесли в этом отображении нет сопоставления для ключа - Исключения:
-
ClassCastException- если ключ неподходящего типа для этого отображения (необязательно) -
NullPointerException- если указанный ключ равен null, и это отображение не допускает null-ключей (необязательно)
put
V put(K key,
V value) Сопоставляет указанное значение с указанным ключом в этом отображении (необязательная операция). Если отображение ранее содержало сопоставление для ключа, старое значение заменяется указанным значением. (Отображение m считается содержащим сопоставление для ключа k тогда и только тогда, когда m.containsKey(k) вернёт true.)
- Параметры:
-
key- ключ, с которым должно быть ассоциировано указанное значение -
value- значение, которое должно быть ассоциировано с указанным ключом - Возвращает:
- предыдущее значение, связанное с
key, илиnullесли дляkeyне было сопоставления. (Возвращаемое значениеnullтакже может указывать, что отображение ранее ассоциировалоnullсо значениемkey, если реализация поддерживаетnullзначения.) - Исключения:
-
UnsupportedOperationException- если операцияputне поддерживается этим отображением -
ClassCastException- если класс указанного ключа или значения препятствует его хранению в этом отображении -
NullPointerException- если указанный ключ или значение равно null, и это отображение не допускает null-ключей или -значений -
IllegalArgumentException- если какие-либо свойства указанного ключа или значения препятствуют его хранению в этом отображении
remove
V remove(Object key)
Удаляет сопоставление для ключа из этого отображения, если оно присутствует (необязательная операция). Более формально, если это отображение содержит сопоставление от ключа k к значению v такое, что (key==null ? k==null : key.equals(k)), то это сопоставление удаляется. (Отображение может содержать не более одного такого сопоставления.)
Возвращает значение, которое это отображение ранее ассоциировало с ключом, или null если отображение не содержало сопоставления для ключа.
Если это отображение допускает null-значения, то возвращаемое значение null не обязательно указывает, что отображение не содержало сопоставления для ключа; также возможно, что отображение явно сопоставило ключ со значением null.
Отображение не будет содержать сопоставление для указанного ключа после возвращения вызова.
- Параметры:
-
key- ключ, сопоставление которого должно быть удалено из отображения - Возвращает:
- предыдущее значение, ассоциированное с
key, илиnullесли дляkeyне было сопоставления. - Исключения:
-
UnsupportedOperationException- если операцияremoveне поддерживается этим отображением -
ClassCastException- если ключ неподходящего типа для этого отображения (необязательно) -
NullPointerException- если указанный ключ равен null, и это отображение не допускает null-ключей (необязательно)
putAll
void putAll(Map<? extends K,? extends V> m)
Копирует все сопоставления из указанного отображения в это отображение (необязательная операция). Эффект этого вызова эквивалентен вызову put(k, v) для этого отображения один раз для каждого сопоставления ключа k со значением v в указанном отображении. Поведение этой операции не определено, если указанное отображение изменяется во время выполнения операции.
- Параметры:
-
m- сопоставления, которые должны быть сохранены в этом отображении - Исключения:
-
UnsupportedOperationException- если операцияputAllне поддерживается этим отображением -
ClassCastException- если класс ключа или значения в указанном отображении препятствует его хранению в этом отображении -
NullPointerException- если указанное отображение равно null, или если это отображение не допускает null-ключей или -значений, и указанное отображение содержит null-ключи или -значения -
IllegalArgumentException- если какие-либо свойства ключа или значения в указанном отображении препятствуют его хранению в этом отображении
clear
void clear()
Удаляет все сопоставления из этого отображения (необязательная операция). Отображение будет пустым после возвращения вызова.
- Исключения:
-
UnsupportedOperationException- если операцияclearне поддерживается этим отображением
keySet
Set<K> keySet()
Возвращает представление Set ключей, содержащихся в этом отображении. Множество поддерживается отображением, поэтому изменения в отображении отражаются в множестве и наоборот. Если отображение изменяется во время итерации по множеству (кроме операций через собственный итератор remove ), результаты итерации не определены. Множество поддерживает удаление элементов, которые удаляют соответствующее сопоставление из отображения, через операции Iterator.remove, Set.remove, removeAll, retainAll, и clear. Оно не поддерживает операции add или addAll.
- Возвращает:
- представление множества ключей, содержащихся в этом отображении
values
Collection<V> values()
Возвращает представление Collection значений, содержащихся в этом отображении. Коллекция поддерживается отображением, поэтому изменения в отображении отражаются в коллекции и наоборот. Если отображение изменяется во время итерации по коллекции (кроме операций через собственный итератор remove ), результаты итерации не определены. Коллекция поддерживает удаление элементов, которые удаляют соответствующее сопоставление из отображения, через операции Iterator.remove, Collection.remove, removeAll, retainAll и clear. Она не поддерживает операции add или addAll.
- Возвращает:
- представление коллекции значений, содержащихся в этом отображении
entrySet
Set<Map.Entry<K,V>> entrySet()
Возвращает представление Set сопоставлений, содержащихся в этом отображении. Множество поддерживается отображением, поэтому изменения в отображении отражаются в множестве и наоборот. Если отображение изменяется во время итерации по множеству (кроме операций через собственный итератор remove или операции setValue над элементом отображения, возвращенным итератором), результаты итерации не определены. Множество поддерживает удаление элементов, которые удаляют соответствующее сопоставление из отображения, через операции Iterator.remove, Set.remove, removeAll, retainAll и clear. Она не поддерживает операции add или addAll.
- Возвращает:
- представление множества сопоставлений, содержащихся в этом отображении
equals
boolean equals(Object o)
Сравнивает указанный объект с этим отображением на равенство. Возвращает true , если заданный объект также является отображением, и два отображения представляют одни и те же сопоставления. Более формально, два отображения m1 и m2 представляют одни и те же сопоставления, если m1.entrySet().equals(m2.entrySet()). Это гарантирует, что метод equals работает корректно при различных реализациях интерфейса Map.
- Переопределяет:
-
equalsв классеObject - Параметры:
-
o- объект, который необходимо сравнить на равенство с этим отображением - Возвращает:
-
true, если указанный объект равен этому отображению - См. также:
-
Object.hashCode(),HashMap
hashCode
int hashCode()
Возвращает значение хэш-кода для этого отображения. Хэш-код отображения определяется как сумма хэш-кодов каждой записи в представлении entrySet() отображения. Это гарантирует, что m1.equals(m2) подразумевает m1.hashCode()==m2.hashCode() для любых двух отображений m1 и m2, как требуется общим соглашением Object.hashCode().
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- значение хэш-кода для этого отображения
- См. также:
-
Map.Entry.hashCode(),Object.equals(Object),equals(Object)
getOrDefault
default V getOrDefault(Object key,
V defaultValue) Возвращает значение, которому сопоставлен указанный ключ, или defaultValue , если в этом отображении нет сопоставления для ключа.
- Требования к реализации:
- Базовая реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и документировать свои свойства конкурентности.
- Параметры:
-
key- ключ, связанное значение которого должно быть возвращено -
defaultValue- значение по умолчанию для ключа - Возвращает:
- значение, которому сопоставлен указанный ключ, или
defaultValue, если в этом отображении нет сопоставления для ключа - Исключения:
-
ClassCastException- если ключ имеет неподходящий тип для этого отображения (необязательно) -
NullPointerException- если указанный ключ равен null, и это отображение не допускает null-ключей (необязательно) - С:
- 1.8
forEach
default void forEach(BiConsumer<? super K,? super V> action)
Выполняет заданное действие для каждой записи в этом отображении, пока все записи не будут обработаны или действие не выбросит исключение. Если не указано иначе реализующим классом, действия выполняются в порядке итерации набора записей (если порядок итерации указан). Исключения, выброшенные действием, передаются вызывающему методу.
- Требования к реализации:
- Базовая реализация эквивалентна для этого
map:for (Map.Entry<K, V> entry : map.entrySet()) action.accept(entry.getKey(), entry.getValue());Базовая реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и документировать свои свойства конкурентности. - Параметры:
-
action- действие, которое должно быть выполнено для каждой записи - Исключения:
-
NullPointerException- если указанное действие равно null -
ConcurrentModificationException- если запись удаляется во время итерации - С:
- 1.8
replaceAll
default void replaceAll(BiFunction<? super K,? super V,? extends V> function)
Заменяет значение каждой записи результатом вызова заданной функции для этой записи, пока все записи не будут обработаны или функция не выбросит исключение. Исключения, выброшенные функцией, передаются вызывающему методу.
- Требования к реализации:
-
Базовая реализация эквивалентна для этого
map:for (Map.Entry<K, V> entry : map.entrySet()) entry.setValue(function.apply(entry.getKey(), entry.getValue()));Базовая реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и документировать свои свойства конкурентности.
- Параметры:
-
function- функция, применяемая к каждой записи - Исключения:
-
UnsupportedOperationException- если операцияsetне поддерживается итератором набора записей этого отображения. -
ClassCastException- если класс значения замены не позволяет сохранить его в этом отображении -
NullPointerException- если указанная функция или значение замены равны null, и это отображение не допускает null-значений -
ClassCastException- если значение замены имеет неподходящий тип для этого отображения (необязательно) -
NullPointerException- если функция или значение замены равны null, и это отображение не допускает null-ключей или значений (необязательно) -
IllegalArgumentException- если какой-либо атрибут значения замены не позволяет сохранить его в этом отображении (необязательно) -
ConcurrentModificationException- если запись была удалена во время итерации - С:
- 1.8
putIfAbsent
default V putIfAbsent(K key,
V value) Если указанный ключ не ассоциирован со значением (или сопоставлен с null) ассоциирует его с заданным значением и возвращает null, иначе возвращает текущее значение.
- Требования к реализации:
- Базовая реализация эквивалентна для этого
map:V v = map.get(key); if (v == null) v = map.put(key, value); return v;Базовая реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и документировать свои свойства конкурентности.
- Параметры:
-
key- ключ, с которым должно быть ассоциировано заданное значение -
value- значение, которое должно быть ассоциировано с указанным ключом - Возвращает:
- предыдущее значение, связанное с указанным ключом, или
null, если для ключа не было сопоставления. (Возвратnullможет также указывать, что отображение ранее ассоциировалоnullс ключом, если реализация поддерживает null-значения.) - Исключения:
-
UnsupportedOperationException- если операцияputне поддерживается этим отображением (необязательно) -
ClassCastException- если ключ или значение имеют неподходящий тип для этого отображения (необязательно) -
NullPointerException- если указанный ключ или значение равны null, и это отображение не допускает null-ключей или значений (необязательно) -
IllegalArgumentException- если какой-либо атрибут указанного ключа или значения не позволяет сохранить его в этом отображении (необязательно) - С:
- 1.8
remove
default 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;Базовая реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и документировать свои свойства конкурентности.
- Параметры:
-
key- ключ, с которым ассоциировано указанное значение -
value- ожидаемое значение, ассоциированное с указанным ключом - Возвращает:
-
true, если значение было удалено - Исключения:
-
UnsupportedOperationException- если операцияremoveне поддерживается этим отображением (необязательно) -
ClassCastException- если ключ или значение имеют неподходящий тип для этого отображения (необязательно) -
NullPointerException- если указанный ключ или значение равны null, и это отображение не допускает null-ключей или значений (необязательно) - С:
- 1.8
replace
default boolean replace(K key,
V oldValue,
V newValue) Заменяет запись для указанного ключа только в том случае, если она в данный момент сопоставлена с указанным значением.
- Требования к реализации:
- Базовая реализация эквивалентна для этого
map:if (map.containsKey(key) && Objects.equals(map.get(key), value)) { map.put(key, newValue); return true; } else return false;Базовая реализация не выбрасывает NullPointerException для отображений, которые не поддерживают null-значения, если oldValue равно null, за исключением случая, когда newValue также равно null.Базовая реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и документировать свои свойства конкурентности.
- Параметры:
-
key- ключ, с которым ассоциировано указанное значение -
oldValue- ожидаемое значение, ассоциированное с указанным ключом -
newValue- значение, которое должно быть ассоциировано с указанным ключом - Возвращает:
-
true, если значение было заменено - Исключения:
-
UnsupportedOperationException- если операцияputне поддерживается этим отображением (необязательно) -
ClassCastException- если класс указанного ключа или значения не позволяет сохранить его в этом отображении -
NullPointerException- если указанный ключ или newValue равны null, и это отображение не допускает null-ключей или значений -
NullPointerException- если oldValue равно null, и это отображение не допускает null-значений (необязательно) -
IllegalArgumentException- если какой-либо атрибут указанного ключа или значения не позволяет сохранить его в этом отображении - С:
- 1.8
replace
default V replace(K key,
V value) Заменяет запись для указанного ключа только в том случае, если она в данный момент сопоставлена с каким-либо значением.
- Требования к реализации:
- Стандартная реализация эквивалентна следующему для этого
map:if (map.containsKey(key)) { return map.put(key, value); } else return null;Стандартная реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать свои свойства конкурентности.
- Параметры:
-
key- ключ, с которым связано указанное значение -
value- значение, которое должно быть связано с указанным ключом - Возвращает:
- предыдущее значение, связанное с указанным ключом, или
nullесли для ключа не было сопоставления. (Возвратnullтакже может указывать, что карта ранее связывалаnullс ключом, если реализация поддерживает значения null.) - Выбрасывает:
-
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно) -
NullPointerException- если указанный ключ или значение равно null, а эта карта не допускает null-ключей или null-значений -
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);
- Требования к реализации:
- Стандартная реализация эквивалентна следующим шагам для этого
map, а затем возвращает текущее значение илиnull, если оно отсутствует сейчас:if (map.get(key) == null) { V newValue = mappingFunction.apply(key); if (newValue != null) map.put(key, newValue); }Стандартная реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать свои свойства конкурентности. В частности, все реализации подинтерфейса
ConcurrentMapдолжны указать, применяется ли функция атомарно только один раз, если значение отсутствует. - Параметры:
-
key- ключ, с которым должно быть связано указанное значение -
mappingFunction- функция для вычисления значения - Возвращает:
- текущее (существующее или вычисленное) значение, связанное с указанным ключом, или null, если вычисленное значение равно null
- Выбрасывает:
-
NullPointerException- если указанный ключ равен null, и эта карта не поддерживает null-ключи, или mappingFunction равен null -
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно) - С момента:
- 1.8
computeIfPresent
default V computeIfPresent(K key,
BiFunction<? super K,? super V,? extends V> remappingFunction) Если значение для указанного ключа присутствует и не равно null, пытается вычислить новое сопоставление, используя ключ и его текущее сопоставленное значение.
Если функция возвращает null, сопоставление удаляется. Если сама функция вызывает (необработанное) исключение, исключение перебрасывается, и текущее сопоставление остается без изменений.
- Требования к реализации:
- Стандартная реализация эквивалентна выполнению следующих шагов для этого
map, затем возвращает текущее значение илиnullесли оно отсутствует:if (map.get(key) != null) { V oldValue = map.get(key); V newValue = remappingFunction.apply(key, oldValue); if (newValue != null) map.put(key, newValue); else map.remove(key); }Стандартная реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать свои свойства конкурентности. В частности, все реализации подинтерфейса
ConcurrentMapдолжны указать, применяется ли функция атомарно только один раз, если значение отсутствует. - Параметры:
-
key- ключ, с которым должно быть связано указанное значение -
remappingFunction- функция для вычисления значения - Возвращает:
- новое значение, связанное с указанным ключом, или null, если нет
- Выбрасывает:
-
NullPointerException- если указанный ключ равен null, и эта карта не поддерживает null-ключи, или remappingFunction равен null -
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно) - С момента:
- 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, сопоставление удаляется (или остается отсутствующим, если изначально отсутствовало). Если сама функция вызывает (необработанное) исключение, исключение перебрасывается, и текущее сопоставление остается без изменений.
- Требования к реализации:
- Стандартная реализация эквивалентна выполнению следующих шагов для этого
map, затем возвращает текущее значение илиnullесли отсутствует:V oldValue = map.get(key); V newValue = remappingFunction.apply(key, oldValue); if (oldValue != null ) { if (newValue != null) map.put(key, newValue); else map.remove(key); } else { if (newValue != null) map.put(key, newValue); else return null; }Стандартная реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать свои свойства конкурентности. В частности, все реализации подинтерфейса
ConcurrentMapдолжны указать, применяется ли функция атомарно только один раз, если значение отсутствует. - Параметры:
-
key- ключ, с которым должно быть связано указанное значение -
remappingFunction- функция для вычисления значения - Возвращает:
- новое значение, связанное с указанным ключом, или null, если нет
- Выбрасывает:
-
NullPointerException- если указанный ключ равен null, и эта карта не поддерживает null-ключи, или remappingFunction равен null -
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно) - С момента:
- 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, сопоставление удаляется. Если сама функция вызывает (необработанное) исключение, исключение перебрасывается, и текущее сопоставление остается без изменений.
- Требования к реализации:
- Стандартная реализация эквивалентна выполнению следующих шагов для этого
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должны указать, применяется ли функция атомарно только один раз, если значение отсутствует. - Параметры:
-
key- ключ, с которым будет связано результирующее значение -
value- ненулевое значение, которое должно быть объединено с существующим значением, связанным с ключом, или, если нет существующего значения или значение null связано с ключом, должно быть связано с ключом -
remappingFunction- функция для перевычисления значения, если оно существует - Возвращает:
- новое значение, связанное с указанным ключом, или null, если значение не связано с ключом
- Выбрасывает:
-
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно) -
NullPointerException- если указанный ключ равен null, и эта карта не поддерживает 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.