Интерфейс Map<K, V>
- Параметры типа:
K— тип ключей, хранящихся в этой картеV— тип сопоставленных значений
- Все известные подинтерфейсы:
Bindings, ConcurrentMap<K,V>, ConcurrentNavigableMap<K, V>, NavigableMap<K, V>, SequencedMap<K, V>, SortedMap<K, V>
- Все известные классы-реализации:
AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, Headers, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap
public interface Map<K,V>
Этот интерфейс заменяет класс Dictionary, который был полностью абстрактным классом, а не интерфейсом.
Интерфейс Map предоставляет три представления коллекций, позволяющие просматривать содержимое карты как набор ключей, коллекцию значений или набор сопоставлений ключ-значение. Порядок карты определяется порядком, в котором итераторы представлений коллекций карты возвращают элементы. Некоторые реализации карт, такие как класс TreeMap, дают конкретные гарантии относительно порядка обхода; другие, например класс HashMap, таких гарантий не дают. Карты с заданным порядком обхода, как правило, являются подтипами интерфейса SequencedMap.
Примечание. При использовании изменяемых объектов в качестве ключей карты следует проявлять особую осторожность. Поведение карты не специфицировано, если значение объекта изменяется таким образом, что это влияет на сравнения equals, пока объект является ключом карты. Особый случай этого запрета — недопустимость содержать саму себя в качестве ключа. Хотя карте разрешено содержать саму себя в качестве значения, это крайне не рекомендуется: методы equals и hashCode для такой карты больше не имеют чёткого определения.
Все реализации карт общего назначения должны предоставлять два «стандартных» конструктора: конструктор без аргументов, создающий пустую карту, и конструктор с единственным аргументом типа Map, создающий новую карту с теми же сопоставлениями ключ-значение, что и аргумент. По сути, последний конструктор позволяет пользователю копировать любую карту, создавая эквивалентную карту нужного класса. Обеспечить выполнение этой рекомендации невозможно (поскольку интерфейсы не могут содержать конструкторы), однако все реализации карт общего назначения в JDK ей соответствуют.
Указано, что «разрушающие» методы этого интерфейса, то есть методы, изменяющие карту, для которой они вызываются, должны выбрасывать UnsupportedOperationException, если эта карта не поддерживает операцию. В этом случае эти методы могут, но не обязаны выбрасывать UnsupportedOperationException, если вызов не оказал бы никакого влияния на карту. Например, вызов метода putAll(Map) для неизменяемой карты может, но не обязан выбрасывать исключение, если карта, сопоставления которой предполагается «наложить», пуста.
Некоторые реализации карт накладывают ограничения на ключи и значения, которые могут содержаться в них. Например, некоторые реализации запрещают нулевые ключи и значения, а некоторые ограничивают типы ключей. Попытка вставить недопустимый ключ или значение приводит к выбрасыванию непроверяемого исключения, обычно NullPointerException или ClassCastException. Попытка проверить наличие недопустимого ключа или значения может привести к выбрасыванию исключения либо просто вернуть false; одни реализации ведут себя первым образом, другие — вторым. В более общем случае попытка выполнить операцию с недопустимым ключом или значением, завершение которой не приведёт к вставке недопустимого элемента в карту, может привести к выбрасыванию исключения или завершиться успешно — на усмотрение реализации. В спецификации этого интерфейса такие исключения помечены как «необязательные».
Многие методы интерфейсов Collections Framework определены через метод equals. Например, в спецификации метода containsKey(Object key) сказано: «возвращает true тогда и только тогда, когда эта карта содержит сопоставление для ключа k, такого что (key==null ? k==null : key.equals(k))». Эту спецификацию не следует истолковывать как подразумевающую, что вызов Map.containsKey с ненулевым аргументом key приведёт к вызову key.equals(k) для любого ключа k. Реализации могут использовать оптимизации, позволяющие избежать вызова equals, например сначала сравнивать хеш-коды двух ключей. (Спецификация Object.hashCode() гарантирует, что два объекта с неодинаковыми хеш-кодами не могут быть равны.) В более общем случае реализации различных интерфейсов Collections Framework могут использовать специфицированное поведение базовых методов Object там, где это сочтёт уместным разработчик реализации.
Некоторые операции с картами, выполняющие рекурсивный обход карты, могут завершиться с исключением для самоссылочных экземпляров, в которых карта прямо или косвенно содержит саму себя. К ним относятся методы clone(), equals(), hashCode() и toString(). Реализации могут при желании обрабатывать сценарий с самоссылкой, однако большинство существующих реализаций этого не делает.
Неизменяемые карты
Статические фабричные методы Map.of, Map.ofEntries и Map.copyOf предоставляют удобный способ создания неизменяемых карт. Экземпляры Map, созданные этими методами, обладают следующими характеристиками:
- Они неизменяемы. Ключи и значения нельзя добавлять, удалять или обновлять. Вызов любого метода-мутатора для Map всегда приводит к выбрасыванию
UnsupportedOperationException. Однако, если содержащиеся в карте ключи или значения сами являются изменяемыми, это может привести к непоследовательному поведению Map или к тому, что её содержимое будет казаться изменившимся. - Они не допускают
nullключи и значения. Попытки создать их сnullключами или значениями приводят кNullPointerException. - Они сериализуемы, если все ключи и значения сериализуемы.
- Они отклоняют повторяющиеся ключи во время создания. Передача повторяющихся ключей статическому фабричному методу приводит к
IllegalArgumentException. - Порядок итерации по сопоставлениям не специфицирован и может изменяться.
- Они являются объектами-значениями. Программистам следует считать взаимозаменяемыми экземпляры, которые равны, и не использовать их для синхронизации, иначе может возникнуть непредсказуемое поведение. Например, в будущей версии синхронизация может завершиться неудачей. Вызывающий код не должен делать предположений об идентичности возвращаемых экземпляров. Фабричные методы могут создавать новые экземпляры или повторно использовать существующие.
- Они сериализуются в соответствии с описанием на странице Сериализованная форма.
Этот интерфейс является частью Java Collections Framework.
- С момента появления:
- 1.2
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static interface |
Map.Entry<K, |
Запись карты (пара ключ-значение). |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
clear() |
Удаляет все сопоставления из этой карты (необязательная операция). |
default V |
compute |
Пытается вычислить сопоставление для указанного ключа и его текущего сопоставленного значения либо null, если текущего сопоставления нет (необязательная операция). |
default V |
computeIfAbsent |
Если указанному ключу ещё не сопоставлено значение (или ему сопоставлено null), пытается вычислить его значение с помощью заданной функции сопоставления и вносит его в эту карту, если результат не равен null (необязательная операция). |
default V |
computeIfPresent |
Если значение для указанного ключа присутствует и не равно null, пытается вычислить новое сопоставление по ключу и его текущему сопоставленному значению (необязательная операция). |
boolean |
containsKey |
Возвращает true, если эта карта содержит сопоставление для указанного ключа. |
boolean |
containsValue |
Возвращает true, если в этой карте одному или нескольким ключам сопоставлено указанное значение. |
static <K, |
copyOf |
Возвращает неизменяемую Map, содержащую записи указанной Map. |
static <K, |
entry |
Возвращает неизменяемую Map.Entry, содержащую указанные ключ и значение. |
Set |
entrySet() |
Возвращает представление Set сопоставлений, содержащихся в этой карте. |
boolean |
equals |
Сравнивает указанный объект с этой картой на равенство. |
default void |
forEach |
Выполняет заданное действие для каждой записи этой карты, пока не будут обработаны все записи или действие не выбросит исключение. |
V |
get |
Возвращает значение, сопоставленное указанному ключу, или null, если в этой карте нет сопоставления для ключа. |
default V |
getOrDefault |
Возвращает значение, сопоставленное указанному ключу, или defaultValue, если в этой карте нет сопоставления для ключа. |
int |
hashCode() |
Возвращает значение хеш-кода этой карты. |
boolean |
isEmpty() |
Возвращает true, если эта карта не содержит сопоставлений ключ-значение. |
Set |
keySet() |
Возвращает представление Set ключей, содержащихся в этой карте. |
default V |
merge |
Если указанному ключу ещё не сопоставлено значение или ему сопоставлено null, сопоставляет ему заданное ненулевое значение (необязательная операция). |
static <K, |
of() |
Возвращает неизменяемую карту, не содержащую сопоставлений. |
static <K, |
of |
Возвращает неизменяемую карту с одним сопоставлением. |
static <K, |
of |
Возвращает неизменяемую карту с двумя сопоставлениями. |
static <K, |
of |
Возвращает неизменяемую карту с тремя сопоставлениями. |
static <K, |
of |
Возвращает неизменяемую карту с четырьмя сопоставлениями. |
static <K, |
of |
Возвращает неизменяемую карту с пятью сопоставлениями. |
static <K, |
of |
Возвращает неизменяемую карту с шестью сопоставлениями. |
static <K, |
of |
Возвращает неизменяемую карту с семью сопоставлениями. |
static <K, |
of |
Возвращает неизменяемую карту с восемью сопоставлениями. |
static <K, |
of |
Возвращает неизменяемую карту с девятью сопоставлениями. |
static <K, |
of |
Возвращает неизменяемую карту с десятью сопоставлениями. |
static <K, |
ofEntries |
Возвращает неизменяемую карту с ключами и значениями, извлечёнными из заданных записей. |
V |
put |
Сопоставляет указанное значение указанному ключу в этой карте (необязательная операция). |
void |
putAll |
Копирует все сопоставления из указанной карты в эту карту (необязательная операция). |
default V |
putIfAbsent |
Если указанному ключу ещё не сопоставлено значение (или ему сопоставлено null), сопоставляет ему заданное значение и возвращает null; в противном случае возвращает текущее значение (необязательная операция). |
V |
remove |
Удаляет из этой карты сопоставление для ключа, если оно присутствует (необязательная операция). |
default boolean |
remove |
Удаляет запись для указанного ключа, только если в данный момент ему сопоставлено указанное значение (необязательная операция). |
default V |
replace |
Заменяет запись для указанного ключа, только если в данный момент ему сопоставлено какое-либо значение (необязательная операция). |
default boolean |
replace |
Заменяет запись для указанного ключа, только если в данный момент ему сопоставлено указанное значение (необязательная операция). |
default void |
replaceAll |
Заменяет значение каждой записи результатом вызова заданной функции для этой записи, пока не будут обработаны все записи или функция не выбросит исключение (необязательная операция). |
int |
size() |
Возвращает количество сопоставлений ключ-значение в этой карте. |
Collection |
values() |
Возвращает представление Collection значений, содержащихся в этой карте. |
Подробное описание методов
size
int size()
Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE.- Возвращает:
- количество отображений ключ-значение в этой карте
isEmpty
boolean isEmpty()
true, если эта карта не содержит отображений ключ-значение.- Возвращает:
-
true, если эта карта не содержит отображений ключ-значение
containsKey
boolean containsKey(Object key)
true, если эта карта содержит отображение для указанного ключа. Точнее, возвращает true тогда и только тогда, когда эта карта содержит отображение для ключа k, такого что Objects.equals(key, k). (Такое отображение может быть не более чем одно.)- Параметры:
-
key— ключ, наличие которого в этой карте проверяется - Возвращает:
-
true, если эта карта содержит отображение для указанного ключа - Вызывает:
-
ClassCastException— если тип ключа недопустим для этой карты (необязательно) -
NullPointerException— если указанный ключ равен null, а эта карта не допускает ключи null (необязательно)
containsValue
boolean containsValue(Object value)
true, если эта карта сопоставляет один или несколько ключей с указанным значением. Точнее, возвращает true тогда и только тогда, когда эта карта содержит хотя бы одно отображение значения v, такого что Objects.equals(value, v). Для большинства реализаций интерфейса Map эта операция, вероятно, потребует времени, линейно зависящего от размера карты.- Параметры:
-
value— значение, наличие которого в этой карте проверяется - Возвращает:
-
true, если эта карта сопоставляет один или несколько ключей с указанным значением - Вызывает:
-
ClassCastException— если тип значения недопустим для этой карты (необязательно) -
NullPointerException— если указанное значение равно null, а эта карта не допускает значения null (необязательно)
get
V get(Object key)
null, если эта карта не содержит отображения для ключа. Точнее, если эта карта содержит отображение ключа k в значение v, такое что Objects.equals(key, 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, такое что Objects.equals(key, 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.hashCode
int hashCode()
entrySet() этой карты. Это гарантирует, что m1.equals(m2) подразумевает m1.hashCode()==m2.hashCode() для любых двух карт m1 и m2, как того требует общий контракт метода Object.hashCode().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— если эта карта не поддерживает операциюreplaceAll(необязательно) -
ClassCastException— если класс заменяющего значения не позволяет сохранить его в этой карте (необязательно) -
NullPointerException— если указанная функция равна null либо если заменяющее значение равно 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— если эта карта не поддерживает операциюputIfAbsent(необязательно) -
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:
Реализация по умолчанию не выбрасывает NullPointerException для карт, не поддерживающих значения null, если oldValue равен null, кроме случая, когда newValue также равен null.if (map.containsKey(key) && Objects.equals(map.get(key), oldValue)) { map.put(key, newValue); return true; } else return false;Реализация по умолчанию не дает гарантий относительно свойств синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и задокументировать свойства его конкурентного выполнения.
- Параметры:
-
key— ключ, с которым связано указанное значение -
oldValue— значение, которое, как ожидается, связано с указанным ключом -
newValue— значение, которое нужно связать с указанным ключом - Возвращает:
-
true, если значение было заменено - Вызывает:
-
UnsupportedOperationException— если эта карта не поддерживает операциюreplace(необязательно) -
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— если эта карта не поддерживает операциюreplace(необязательно) -
ClassCastException— если класс указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) -
NullPointerException— если указанный ключ или значение равны 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); }Реализация по умолчанию не дает гарантий обнаружения изменений этой карты функцией сопоставления во время вычисления и, если уместно, сообщения об ошибке. Непараллельные реализации должны переопределить этот метод и по возможности выбрасывать
ConcurrentModificationException, если обнаружено, что функция сопоставления изменяет эту карту во время вычисления. Параллельные реализации должны переопределить этот метод и по возможности выбрасыватьIllegalStateException, если обнаружено, что функция сопоставления изменяет эту карту во время вычисления и в результате вычисление никогда не завершится.Реализация по умолчанию не дает гарантий относительно свойств синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и задокументировать свойства его конкурентного выполнения. В частности, все реализации подинтерфейса
ConcurrentMapдолжны указать в документации, применяется ли функция сопоставления атомарно ровно один раз только в том случае, если значение отсутствует. - Параметры:
-
key— ключ, с которым нужно связать указанное значение -
mappingFunction— функция сопоставления для вычисления значения - Возвращает:
- текущее (существующее или вычисленное) значение, связанное с указанным ключом, или null, если вычисленное значение равно null
- Вызывает:
-
NullPointerException— если указанный ключ равен null, а эта карта не поддерживает ключи null, либо если mappingFunction равен null -
UnsupportedOperationException— если эта карта не поддерживает операциюcomputeIfAbsent(необязательно) -
ClassCastException— если класс указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) -
IllegalArgumentException— если какое-либо свойство указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) - Начиная с версии:
- 1.8
computeIfPresent
default V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Если функция пересопоставления возвращает 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); }Реализация по умолчанию не гарантирует обнаружение изменения этой карты функцией пересопоставления во время вычисления и, при необходимости, сообщение об ошибке. Реализации без поддержки параллелизма должны переопределять этот метод и, по возможности, выбрасывать
ConcurrentModificationException, если обнаружено, что функция пересопоставления изменяет эту карту во время вычисления. Реализации с поддержкой параллелизма должны переопределять этот метод и, по возможности, выбрасыватьIllegalStateException, если обнаружено, что функция пересопоставления изменяет эту карту во время вычисления и в результате вычисление никогда не завершится.Реализация по умолчанию не гарантирует свойств синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределять этот метод и документировать свойства параллелизма. В частности, все реализации подинтерфейса
ConcurrentMapдолжны документировать, применяется ли функция пересопоставления атомарно один раз только в том случае, если значение отсутствует. - Параметры:
-
key— ключ, с которым должно быть связано указанное значение -
remappingFunction— функция пересопоставления для вычисления значения - Возвращает:
- новое значение, связанное с указанным ключом, или null, если такого значения нет
- Исключения:
-
NullPointerException— если указанный ключ равен null, а эта карта не поддерживает ключи null, или если remappingFunction равна null -
UnsupportedOperationException— если эта карта не поддерживает операциюcomputeIfPresent(необязательно) -
ClassCastException— если класс указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) -
IllegalArgumentException— если какое-либо свойство указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) - Начиная с:
- 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:V oldValue = map.get(key); V newValue = remappingFunction.apply(key, oldValue); if (newValue != null) { map.put(key, newValue); } else if (oldValue != null || map.containsKey(key)) { map.remove(key); } return newValue;Реализация по умолчанию не гарантирует обнаружение изменения этой карты функцией пересопоставления во время вычисления и, при необходимости, сообщение об ошибке. Реализации без поддержки параллелизма должны переопределять этот метод и, по возможности, выбрасывать
ConcurrentModificationException, если обнаружено, что функция пересопоставления изменяет эту карту во время вычисления. Реализации с поддержкой параллелизма должны переопределять этот метод и, по возможности, выбрасыватьIllegalStateException, если обнаружено, что функция пересопоставления изменяет эту карту во время вычисления и в результате вычисление никогда не завершится.Реализация по умолчанию не гарантирует свойств синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределять этот метод и документировать свойства параллелизма. В частности, все реализации подинтерфейса
ConcurrentMapдолжны документировать, применяется ли функция пересопоставления атомарно один раз только в том случае, если значение отсутствует. - Параметры:
-
key— ключ, с которым должно быть связано указанное значение -
remappingFunction— функция пересопоставления для вычисления значения - Возвращает:
- новое значение, связанное с указанным ключом, или null, если такого значения нет
- Исключения:
-
NullPointerException— если указанный ключ равен null, а эта карта не поддерживает ключи null, или если remappingFunction равна null -
UnsupportedOperationException— если эта карта не поддерживает операциюcompute(необязательно) -
ClassCastException— если класс указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) -
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, соответствие удаляется. Если сама функция пересопоставления выбрасывает (непроверяемое) исключение, исключение повторно выбрасывается, а текущее соответствие остается неизменным.
Функция пересопоставления не должна изменять эту карту во время вычисления.
- Требования к реализации:
- Реализация по умолчанию эквивалентна выполнению следующих шагов для этого
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);Реализация по умолчанию не гарантирует обнаружение изменения этой карты функцией пересопоставления во время вычисления и, при необходимости, сообщение об ошибке. Реализации без поддержки параллелизма должны переопределять этот метод и, по возможности, выбрасывать
ConcurrentModificationException, если обнаружено, что функция пересопоставления изменяет эту карту во время вычисления. Реализации с поддержкой параллелизма должны переопределять этот метод и, по возможности, выбрасыватьIllegalStateException, если обнаружено, что функция пересопоставления изменяет эту карту во время вычисления и в результате вычисление никогда не завершится.Реализация по умолчанию не гарантирует свойств синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределять этот метод и документировать свойства параллелизма. В частности, все реализации подинтерфейса
ConcurrentMapдолжны документировать, применяется ли функция пересопоставления атомарно один раз только в том случае, если значение отсутствует. - Параметры:
-
key— ключ, с которым должно быть связано результирующее значение -
value— ненулевое значение, объединяемое с существующим значением, связанным с ключом, или сопоставляемое с ключом, если существующего значения нет либо с ключом связано значение null -
remappingFunction— функция пересопоставления для повторного вычисления значения, если оно существует - Возвращает:
- новое значение, связанное с указанным ключом, или null, если с ключом не связано никакого значения
- Исключения:
-
UnsupportedOperationException— если эта карта не поддерживает операциюmerge(необязательно) -
ClassCastException— если класс указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) -
IllegalArgumentException— если какое-либо свойство указанного ключа или значения не позволяет сохранить его в этой карте (необязательно) -
NullPointerException— если указанный ключ равен null, а эта карта не поддерживает ключи null, или если значение либо remappingFunction равны null - Начиная с:
- 1.8
of
static <K,V> Map<K,V> of()
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Возвращает:
- пустую
Map - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ соответствия -
v1— значение соответствия - Возвращает:
Map, содержащее указанное соответствие- Исключения:
-
NullPointerException— если ключ или значение равныnull - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ первого соответствия -
v1— значение первого соответствия -
k2— ключ второго соответствия -
v2— значение второго соответствия - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какой-либо ключ или значение равныnull - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ первого соответствия -
v1— значение первого соответствия -
k2— ключ второго соответствия -
v2— значение второго соответствия -
k3— ключ третьего соответствия -
v3— значение третьего соответствия - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какой-либо ключ или значение равныnull - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ первого соответствия -
v1— значение первого соответствия -
k2— ключ второго соответствия -
v2— значение второго соответствия -
k3— ключ третьего соответствия -
v3— значение третьего соответствия -
k4— ключ четвертого соответствия -
v4— значение четвертого соответствия - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какой-либо ключ или значение равныnull - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ первого соответствия -
v1— значение первого соответствия -
k2— ключ второго соответствия -
v2— значение второго соответствия -
k3— ключ третьего соответствия -
v3— значение третьего соответствия -
k4— ключ четвертого соответствия -
v4— значение четвертого соответствия -
k5— ключ пятого соответствия -
v5— значение пятого соответствия - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какой-либо ключ или значение равныnull - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ первого соответствия -
v1— значение первого соответствия -
k2— ключ второго соответствия -
v2— значение второго соответствия -
k3— ключ третьего соответствия -
v3— значение третьего соответствия -
k4— ключ четвертого соответствия -
v4— значение четвертого соответствия -
k5— ключ пятого соответствия -
v5— значение пятого соответствия -
k6— ключ шестого соответствия -
v6— значение шестого соответствия - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какой-либо ключ или значение равныnull - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ первого соответствия -
v1— значение первого соответствия -
k2— ключ второго соответствия -
v2— значение второго соответствия -
k3— ключ третьего соответствия -
v3— значение третьего соответствия -
k4— ключ четвертого соответствия -
v4— значение четвертого соответствия -
k5— ключ пятого соответствия -
v5— значение пятого соответствия -
k6— ключ шестого соответствия -
v6— значение шестого соответствия -
k7— ключ седьмого соответствия -
v7— значение седьмого соответствия - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какой-либо ключ или значение равныnull - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ первого соответствия -
v1— значение первого соответствия -
k2— ключ второго соответствия -
v2— значение второго соответствия -
k3— ключ третьего соответствия -
v3— значение третьего соответствия -
k4— ключ четвертого соответствия -
v4— значение четвертого соответствия -
k5— ключ пятого соответствия -
v5— значение пятого соответствия -
k6— ключ шестого соответствия -
v6— значение шестого соответствия -
k7— ключ седьмого соответствия -
v7— значение седьмого соответствия -
k8— ключ восьмого соответствия -
v8— значение восьмого соответствия - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какой-либо ключ или значение равныnull - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ первого соответствия -
v1— значение первого соответствия -
k2— ключ второго соответствия -
v2— значение второго соответствия -
k3— ключ третьего соответствия -
v3— значение третьего соответствия -
k4— ключ четвертого соответствия -
v4— значение четвертого соответствия -
k5— ключ пятого соответствия -
v5— значение пятого соответствия -
k6— ключ шестого соответствия -
v6— значение шестого соответствия -
k7— ключ седьмого соответствия -
v7— значение седьмого соответствия -
k8— ключ восьмого соответствия -
v8— значение восьмого соответствия -
k9— ключ девятого соответствия -
v9— значение девятого соответствия - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какой-либо ключ или значение равныnull - Начиная с:
- 9
of
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10)
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
k1— ключ первого соответствия -
v1— значение первого соответствия -
k2— ключ второго соответствия -
v2— значение второго соответствия -
k3— ключ третьего соответствия -
v3— значение третьего соответствия -
k4— ключ четвертого соответствия -
v4— значение четвертого соответствия -
k5— ключ пятого соответствия -
v5— значение пятого соответствия -
k6— ключ шестого соответствия -
v6— значение шестого соответствия -
k7— ключ седьмого соответствия -
v7— значение седьмого соответствия -
k8— ключ восьмого соответствия -
v8— значение восьмого соответствия -
k9— ключ девятого соответствия -
v9— значение девятого соответствия -
k10— ключ десятого соответствия -
v10— значение десятого соответствия - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какой-либо ключ или значение равныnull - Начиная с:
- 9
ofEntries
@SafeVarargs static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K, ? extends V>... entries)
- Примечание к API:
- Удобно создавать записи карты с помощью метода
Map.entry(). Например,import static java.util.Map.entry; Map<Integer,String> map = Map.ofEntries( entry(1, "a"), entry(2, "b"), entry(3, "c"), ... entry(26, "z")); - Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
entries— массивMap.Entrys, содержащих ключи и значения, из которых формируется карта - Возвращает:
Map, содержащее указанные соответствия- Исключения:
-
IllegalArgumentException— если ключи дублируются -
NullPointerException— если какая-либо запись, ключ или значение равныnullлибо массивentriesравенnull - Начиная с:
- 9
- См. также:
entry
static <K,V> Map.Entry<K,V> entry(K k, V v)
Map.Entry, содержащий заданные ключ и значение. Эти записи подходят для заполнения экземпляров Map с помощью метода Map.ofEntries(). Экземпляры Entry, созданные этим методом, обладают следующими характеристиками: - Они не допускают ключи и значения
null. Попытки создать их с ключом или значениемnullприводят кNullPointerException. - Они неизменяемы. Вызовы
Entry.setValue()для возвращённогоEntryприводят кUnsupportedOperationException. - Они не сериализуются.
- Они основаны на значениях. Программистам следует считать экземпляры, которые равны, взаимозаменяемыми и не использовать их для синхронизации, иначе может возникнуть непредсказуемое поведение. Например, в будущей версии синхронизация может завершиться неудачей. Вызывающим сторонам не следует делать предположений об идентичности возвращаемых экземпляров. Этот метод может создавать новые экземпляры или повторно использовать существующие.
- Примечание API:
- Для сериализуемого
Entryсм.AbstractMap.SimpleEntryилиAbstractMap.SimpleImmutableEntry. - Параметры типа:
K— тип ключаV— тип значения- Параметры:
-
k— ключ -
v— значение - Возвращает:
Entry, содержащий указанные ключ и значение- Исключения:
-
NullPointerException— если ключ или значение равныnull - Начиная с:
- 9
- См. также:
copyOf
static <K,V> Map<K,V> copyOf(Map<? extends K, ? extends V> map)
- Примечание по реализации:
- Если заданная Map является неизменяемой Map, вызов copyOf обычно не создаёт копию.
- Параметры типа:
K— тип ключаMapV— тип значенияMap- Параметры:
-
map—Map, из которой берутся записи; не должна быть null - Возвращает:
Map, содержащую записи из заданнойMap- Исключения:
-
NullPointerException— если map равна null или содержит ключи либо значения null - Начиная с:
- 10
© 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/Map.html