Spec-Zone.ru › OpenJDK 27

Интерфейс 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 и ofLazy(Set, Function)ПРЕДВАРИТЕЛЬНЫЙ ПРОСМОТР предоставляют удобный способ создания неизменяемых карт. Экземпляры Map, созданные этими методами, обладают следующими характеристиками:

  • Они неизменяемы. Ключи и значения нельзя добавлять, удалять или обновлять. Вызов любого метода-мутатора для Map всегда приводит к выбросу UnsupportedOperationException. Однако, если содержащиеся ключи или значения сами являются изменяемыми, это может привести к непоследовательному поведению Map или видимому изменению её содержимого.
  • Они не допускают null в качестве ключей и значений. Попытки создать их с null в качестве ключей или значений приводят к NullPointerException.
  • Если не указано иное, они сериализуемы, если все ключи и значения сериализуемы.
  • Они отклоняют повторяющиеся ключи во время создания. Передача повторяющихся ключей статическому фабричному методу приводит к IllegalArgumentException.
  • Порядок обхода сопоставлений не определён и может изменяться.
  • Они являются основанными на значениях. Программистам следует считать взаимозаменяемыми экземпляры, которые равны, и не использовать их для синхронизации, иначе может возникнуть непредсказуемое поведение. Например, в будущей версии синхронизация может завершиться сбоем. Вызывающим кодам не следует делать предположений об идентичности возвращаемых экземпляров. Фабричные методы могут создавать новые экземпляры или повторно использовать существующие.
  • Они сериализуются в соответствии с описанием на странице Сериализованная форма.

Этот интерфейс является частью 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)
Пытается вычислить сопоставление для указанного ключа и текущего сопоставленного ему значения или null, если текущего сопоставления нет (необязательная операция).
default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
Если указанному ключу ещё не сопоставлено значение (или ему сопоставлено null), пытается вычислить его значение с помощью заданной функции сопоставления и добавляет его в эту карту, если результат не равен null (необязательная операция).
default V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Если для указанного ключа имеется ненулевое значение, пытается вычислить новое сопоставление на основе ключа и текущего сопоставленного ему значения (необязательная операция).
boolean containsKey(Object key)
Возвращает true, если эта карта содержит сопоставление для указанного ключа.
boolean containsValue(Object value)
Возвращает true, если эта карта сопоставляет указанному значению один или несколько ключей.
static <K,V> Map<K,V> copyOf(Map<? extends K, ? extends V> map)
Возвращает неизменяемую карту, содержащую записи заданной карты.
static <K,V> Map.Entry<K,V> entry(K k, V v)
Возвращает неизменяемый Map.Entry, содержащий заданные ключ и значение.
Set<Map.Entry<K,V>> entrySet()
Возвращает представление сопоставлений, содержащихся в этой карте, в виде Set.
boolean equals(Object o)
Сравнивает указанный объект с этой картой на предмет равенства.
default void forEach(BiConsumer<? super K, ? super V> action)
Выполняет заданное действие для каждой записи этой карты, пока не будут обработаны все записи или действие не выбросит исключение.
V get(Object key)
Возвращает значение, сопоставленное указанному ключу, или null, если эта карта не содержит сопоставления для ключа.
default V getOrDefault(Object key, V defaultValue)
Возвращает значение, сопоставленное указанному ключу, или defaultValue, если эта карта не содержит сопоставления для ключа.
int hashCode()
Возвращает значение хеш-кода этой карты.
boolean isEmpty()
Возвращает true, если эта карта не содержит сопоставлений ключ-значение.
Set<K> keySet()
Возвращает представление ключей, содержащихся в этой карте, в виде Set.
default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)
Если указанному ключу ещё не сопоставлено значение или ему сопоставлено значение null, сопоставляет ему заданное ненулевое значение (необязательная операция).
static <K,V> Map<K,V> of()
Возвращает неизменяемую карту, содержащую ноль сопоставлений.
static <K,V> Map<K,V> of(K k1, V v1)
Возвращает неизменяемую карту, содержащую одно сопоставление.
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2)
Возвращает неизменяемую карту, содержащую два сопоставления.
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3)
Возвращает неизменяемую карту, содержащую три сопоставления.
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4)
Возвращает неизменяемую карту, содержащую четыре сопоставления.
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)
Возвращает неизменяемую карту, содержащую пять сопоставлений.
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)
Возвращает неизменяемую карту, содержащую шесть сопоставлений.
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)
Возвращает неизменяемую карту, содержащую семь сопоставлений.
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)
Возвращает неизменяемую карту, содержащую восемь сопоставлений.
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)
Возвращает неизменяемую карту, содержащую девять сопоставлений.
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)
Возвращает неизменяемую карту, содержащую десять сопоставлений.
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K, ? extends V>... entries)
Возвращает неизменяемую карту, содержащую ключи и значения, извлечённые из заданных записей.
static <K,V> Map<K,V> ofLazy(Set<? extends K> keys, Function<? super K, ? extends V> computingFunction)
Предварительный просмотр.
Возвращает новую карту с ленивым вычислением, используя предоставленный keys.
V put(K key, V value)
Сопоставляет указанное значение указанному ключу в этой карте (необязательная операция).
void putAll(Map<? extends K, ? extends V> m)
Копирует все сопоставления из указанной карты в эту карту (необязательная операция).
default V putIfAbsent(K key, V value)
Если указанному ключу ещё не сопоставлено значение (или ему сопоставлено null), сопоставляет ему заданное значение и возвращает null; в противном случае возвращает текущее значение (необязательная операция).
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()
Возвращает представление значений, содержащихся в этой карте, в виде 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-ключи или 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-значения, а указанная карта содержит 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 — если эта карта не поддерживает операцию 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-ключи или 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-ключи или null-значения (необязательно)
Начиная с версии:
1.8

replace

default boolean replace(K key, V oldValue, V newValue)
Заменяет запись для указанного ключа, только если в данный момент он отображается в указанное значение (необязательная операция).
Требования к реализации:
Реализация по умолчанию эквивалентна следующему для этой map:
if (map.containsKey(key) && Objects.equals(map.get(key), oldValue)) {
    map.put(key, newValue);
    return true;
} else
    return false;
Реализация по умолчанию не вызывает NullPointerException для карт, не поддерживающих null-значения, если oldValue равен null, кроме случая, когда newValue также равен null.

Реализация по умолчанию не даёт никаких гарантий относительно свойств синхронизации или атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать свойства его параллельного выполнения.

Параметры:
key — ключ, с которым связано указанное значение
oldValue — значение, которое, как ожидается, связано с указанным ключом
newValue — значение, которое нужно связать с указанным ключом
Возвращает:
true, если значение было заменено
Вызывает:
UnsupportedOperationException — если эта карта не поддерживает операцию replace (необязательно)
ClassCastException — если класс указанного ключа или значения не позволяет сохранить его в этой карте
NullPointerException — если указанный ключ или newValue равны null, а эта карта не допускает 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-ключи или 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 msg к сопоставленному значению:
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, он связывается с заданным ненулевым значением (необязательная операция). В противном случае связанное значение заменяется результатом заданной функции переназначения либо удаляется, если результат равен 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 - тип ключа карты Map
V - тип значения карты Map
Возвращает:
пустую Map
С версии:
9

of

static <K,V> Map<K,V> of(K k1, V v1)
Возвращает немодифицируемую карту, содержащую одно соответствие. Подробности см. в разделе Немодифицируемые карты.
Параметры типа:
K - тип ключа карты Map
V - тип значения карты Map
Параметры:
k1 - ключ соответствия
v1 - значение соответствия
Возвращает:
Map, содержащую указанное соответствие
Выбрасывает:
NullPointerException - если ключ или значение равны null
С версии:
9

of

static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2)
Возвращает немодифицируемую карту, содержащую два соответствия. Подробности см. в разделе Немодифицируемые карты.
Параметры типа:
K - тип ключа карты Map
V - тип значения карты 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 - тип ключа карты Map
V - тип значения карты 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 - тип ключа карты Map
V - тип значения карты 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 - тип ключа карты Map
V - тип значения карты 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 - тип ключа карты Map
V - тип значения карты 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 - тип ключа карты Map
V - тип значения карты 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 - тип ключа карты Map
V - тип значения карты 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 - тип ключа карты Map
V - тип значения карты 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 - тип ключа карты Map
V - тип значения карты 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 - тип ключа карты Map
V - тип значения карты Map
Параметры:
entries - Map.Entryи, содержащие ключи и значения, из которых формируется карта
Возвращает:
Map, содержащую указанные соответствия
Выбрасывает:
IllegalArgumentException - если имеются повторяющиеся ключи
NullPointerException - если любая запись, ключ или значение равны null либо если массив entries равен null
См. также:
  • Map.entry()

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.
  • Они не сериализуемы.
  • Они основаны на значениях (value-based). Программистам следует считать равные друг другу экземпляры равными и взаимозаменяемыми и не использовать их для синхронизации, иначе может возникнуть непредсказуемое поведение. Например, в будущей версии синхронизация может завершиться неудачей. Вызывающий код не должен делать никаких предположений об идентичности возвращённых экземпляров. Этот метод может создавать новые экземпляры или повторно использовать существующие.
Примечание к API:
Сериализуемый Entry см. в AbstractMap.SimpleEntry или AbstractMap.SimpleImmutableEntry.
Параметры типа:
K — тип ключа
V — тип значения
Параметры:
k — ключ
v — значение
Возвращает:
Entry, содержащий указанные ключ и значение
Исключения:
NullPointerException — если ключ или значение — null
Начиная с версии:
9
См. также:
  • Map.ofEntries()

copyOf

static <K,V> Map<K,V> copyOf(Map<? extends K, ? extends V> map)
Возвращает неизменяемую Map, содержащую записи заданной Map. Заданная Map не должна быть null и не должна содержать ключи или значения null. Если впоследствии заданная Map будет изменена, возвращённая Map не будет отражать эти изменения.
Примечание по реализации:
Если заданная Map является неизменяемой Map, вызов copyOf обычно не создаёт копию.
Параметры типа:
K — тип ключей Map
V — тип значений Map
Параметры:
map — Map, из которой берутся записи; не должна быть null
Возвращает:
Map, содержащую записи заданной Map
Исключения:
NullPointerException — если map равна null или содержит ключи либо значения null
Начиная с версии:
10

ofLazy

static <K,V> Map<K,V> ofLazy(Set<? extends K> keys, Function<? super K, ? extends V> computingFunction)
ofLazy является предварительной версией API платформы Java.
Программы могут использовать ofLazy только при включённых функциях предварительной версии.
Функции предварительной версии могут быть удалены в будущей версии или стать постоянными функциями платформы Java.
Возвращает новую карту с отложенным вычислением, используя предоставленный keys.

Возвращённая карта является неизменяемой; её ключи известны при создании. Значения карты вычисляются по запросу с помощью предоставленного computingFunction при первом обращении к ним (например, через Map::get).

Предоставленная функция вычисления гарантированно вызывается не более одного раза для каждого ключа, даже в многопоточной среде. Потоки, одновременно обращающиеся к значению, которое уже вычисляется, будут заблокированы до вычисления значения или аварийного завершения функции вычисления.

Если вычисление, выполняемое предоставленной функцией (для ключа), приводит к выбросу непроверяемого исключения, отложенное значение не инициализируется, а переходит в состояние ошибки, после чего выбрасывается NoSuchElementException, причиной которого является непроверяемое исключение. Последующие вызовы Map::get для того же ключа выбрасывают NoSuchElementException (без повторного вызова функции вычисления), не имеющий причины и содержащий в сообщении имя класса исходного непроверяемого исключения.

Все сбои обрабатываются таким образом. Существуют два особых случая, в которых выбрасываются непроверяемые исключения:

Если функция вычисления возвращает null, будет выброшено NoSuchElementException (причиной которого является NullPointerException). Поэтому, как и другие неизменяемые карты, созданные с помощью фабричных методов Map::of, отложенно вычисляемая карта никогда не может содержать значения null. Клиенты, которым нужны значения, допускающие null, могут обернуть элементы в контейнер Optional.

Если функция вычисления рекурсивно вызывает саму себя (для того же ключа) через возвращённую отложенно вычисляемую карту, будет выброшено NoSuchElementException (причиной которого является IllegalStateException).

Значения любых представлений values() или entrySet() возвращённой карты также вычисляются по запросу.

Методы Object возвращённой карты: equals(), hashCode() и toString() могут инициировать инициализацию одного или нескольких отложенных значений. Если инициализация хотя бы одного значения завершается ошибкой, методы hashCode() и toString() выбрасывают NoSuchElementException, а Object.equals(Object) выбрасывает NoSuchElementException, если при сравнении происходит обращение к значению, которое не удалось вычислить.

Возвращённая отложенно вычисляемая карта содержит сильную ссылку на лежащую в её основе функцию вычисления, по крайней мере пока остаются невычисленные значения.

Возвращённая Map не является Serializable.

Если впоследствии предоставленный Set типа keys будет изменён, возвращённый Map не будет отражать эти изменения.

Set типа keys должен использовать equals() в качестве отношения эквивалентности, либо его метод сравнения должен быть согласован с equals; в противном случае поведение не определено.

Ниже приведён пример приложения, кэширующего значения, возвращаемые некоторыми expensiveOperation(int param) для заданного набора входных параметров. Используя отложенно вычисляемую карту, мы гарантируем, что expensiveOperation(int param) вызывается не более одного раза для каждого уникального входного параметра. После создания получение значений может подвергаться свёртке констант JVM:

class Application {

    private static final Map<Integer, Double> CACHE
        = Map.ofLazy(Set.of(0, 1, 3, 42, 97), param -> expensiveOperation(param));

    public static Optional<Double> cachedExpensiveOperation(int param) {
        return Optional.ofNullable(CACHE.get(param));
    }

    private static double expensiveOperation(int param) {
      // Calculate the value ...
    }

     // Eligible for constant folding
     double val = cachedExpensiveOperation(42).orElseThrow();

}

Возвращённую Map<K, V> можно рассматривать как карту, основанную на поле Map<K, LazyConstant<V>>, где операция get(Object) эквивалентна следующему:

 class LazyMap<K, V> extends AbstractMap<K, V> {

     private final Map<K, LazyConstant<V>> backingMap;

     public LazyMap(Set<K> keys, Function<K, V> computingFunction) {
         this.backingMap = keys.stream()
                 .collect(Collectors.toUnmodifiableMap(
                         Function.identity(),
                         k -> LazyConstant.of(() -> computingFunction.apply(k))));
     }

     @Override
     public V get(Object key) {
         var lazyConstant = backingMap.get(key);
         return lazyConstant == null
                 ? null
                 : lazyConstant.get();
     }
 }
Однако производительность и эффективность использования памяти могут быть выше.

Значения в возвращённой карте могут подвергаться некоторым оптимизациям производительности, например свёртке констант, описанной в LazyConstant.

Примечание по реализации:
после успешной инициализации всех значений или их перехода в состояние ошибки сильная ссылка на функцию вычисления больше не хранится, и она может быть удалена сборщиком мусора.
Параметры типа:
K — тип ключей, хранящихся в возвращённой карте
V — тип отображаемых значений в возвращённой карте
Параметры:
keys — ключи (не равные null) возвращённой вычисляемой карты
computingFunction — вызывается при первом обращении к соответствующему значению
Возвращает:
новую карту с отложенным вычислением, используя предоставленный keys
Исключения:
NullPointerException — если предоставленный набор keys равен null, если набор keys содержит элемент null или если предоставленный computingFunction равен null
Начиная с версии:
26
См. также:
  • LazyConstantПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ

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

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

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