Интерфейс Map 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, созданные этими методами, обладают следующими характеристиками:
- Они являются неизменяемыми. Ключи и значения не могут быть добавлены, удалены или обновлены. Вызов любого метода-мутатора для карты всегда вызовет выброс
UnsupportedOperationException. Однако, если содержащиеся ключи или значения сами по себе изменяемы, это может привести к несогласованному поведению карты или её содержимое может показаться изменяющимся. - Они не допускают
nullключей и значений. Попытки создать их сnullключами или значениями приводят кNullPointerException. - Они сериализуемы, если все ключи и значения сериализуемы.
- Они отклоняют дублирующиеся ключи во время создания. Дублирующиеся ключи, переданные методу-фабрике, приводят к
IllegalArgumentException. - Порядок итерации отображений не определён и может измениться.
- Они являются значенностно-ориентированными. Программисты должны рассматривать экземпляры, которые являются равными, как взаимозаменяемые и не должны использовать их для синхронизации, иначе может произойти непредсказуемое поведение. Например, в будущей версии синхронизация может завершиться ошибкой. Вызывающие стороны не должны делать никаких предположений об идентичности возвращаемых экземпляров. Фабрики свободны создавать новые экземпляры или повторно использовать существующие.
- Они сериализуются, как указано на странице Serialized Form.
Этот интерфейс является членом Java Collections Framework.
- Since:
- 1.2
- См. также:
Краткое описание вложенных классов
| Modifier and Type | Interface | Description |
|---|---|---|
static interface |
Map.Entry<K, |
Запись карты (пара ключ-значение). |
Краткое описание методов
| Modifier and Type | Method | Description |
|---|---|---|
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-ключей или 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.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-ключи или null-значения (необязательно) -
IllegalArgumentException- если какое-либо свойство указанного ключа или значения предотвращает его хранение в этой карте (необязательно) - С момента:
- 1.8
удалить
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
заменить
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
заменить
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-ключи, или функция переназначения 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-ключи, или функция переназначения 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-ключи, или значение или функция переназначения 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- значение второго отображения - Возвращает:
- a
Mapcontaining the specified mappings - Исключения:
-
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- значение третьего отображения - Возвращает:
- a
Mapcontaining the specified mappings - Исключения:
-
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- значение четвёртого отображения - Возвращает:
- a
Mapcontaining the specified mappings - Исключения:
-
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- значение пятого отображения - Возвращает:
- a
Mapcontaining the specified mappings - Исключения:
-
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- значение шестого отображения - Возвращает:
- a
Mapcontaining the specified mappings - Исключения:
-
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- значение седьмого отображения - Возвращает:
- a
Mapcontaining the specified mappings - Исключения:
-
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- значение восьмого сопоставления - Возвращает:
- a
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- значение первого сопоставления - ...
- Возвращает:
- a
Map, содержащую указанные сопоставления - Исключения:
- ...
- С тех пор как:
- 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- Параметры:
- ...
- Возвращает:
- a
Map, содержащую указанные сопоставления - Исключения:
- ...
- С тех пор как:
- 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.Entry, содержащие ключи и значения, из которых заполняется карта - Возвращает:
- a
Map, содержащую указанные сопоставления - Исключения:
- ...
- С тех пор как:
- 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- значение - Возвращает:
- a
Entry, содержащую указанный ключ и значение - Исключения:
-
NullPointerException- если ключ или значение являютсяnull - С тех пор как:
- 9
- См. также:
copyOf
static <K,V> Map<K,V> copyOf(Map<? extends K, ? extends V> map)
- Примечание об реализации:
- Если заданная карта является неизменяемой картой, вызов copyOf обычно не создаст копию.
- Параметры типа:
K- тип ключа картыV- тип значения карты- Параметры:
-
map- карта, из которой берутся элементы, не должна быть null - Возвращает:
- неизменяемую карту, содержащую элементы заданной карты
- Исключения:
-
NullPointerException- если карта равна 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/Map.html