Интерфейс Map<K, V>
- Параметры типа:
-
K- тип ключей, поддерживаемых этой картой -
V- тип сопоставленных значений
- Все известные подинтерфейсы:
-
Bindings,ConcurrentMap<K,,V> ConcurrentNavigableMap<K,,V> NavigableMap<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, этого не делают.
Примечание: необходимо проявлять особую осторожность, если в качестве ключей карты используются изменяемые объекты. Поведение карты не определено, если значение объекта изменяется таким образом, что влияет на equals сравнения, в то время как объект является ключом в карте. Специальный случай этого запрета заключается в том, что карта не может содержать себя в качестве ключа. Хотя карта может содержать себя в качестве значения, следует проявлять крайнюю осторожность: методы equals и hashCode для такой карты больше не определены корректно.
Все классы реализаций карт общего назначения должны предоставлять два «стандартных» конструктора: конструктор без аргументов, который создает пустую карту, и конструктор с одним аргументом типа Map, который создает новую карту с теми же парами ключ-значение, что и ее аргумент. По сути, последний конструктор позволяет пользователю копировать любую карту, создавая эквивалентную карту нужного класса. Нет способа принудительно выполнить эту рекомендацию (поскольку интерфейсы не могут содержать конструкторы), но все реализации карт общего назначения в JDK соответствуют ей.
«Деструктивные» методы, содержащиеся в этом интерфейсе, то есть методы, которые изменяют карту, на которой они работают, определяются так, чтобы выбрасывать UnsupportedOperationException, если эта карта не поддерживает операцию. В этом случае эти методы могут, но не обязаны, выбрасывать исключение UnsupportedOperationException, если вызов не окажет никакого влияния на карту. Например, вызов метода putAll(Map) на неизменяемой карте может, но не обязан, выбросить исключение, если карта, чьи сопоставления должны быть «наложены», пуста.
В некоторых реализациях карт существуют ограничения на ключи и значения, которые они могут содержать. Например, некоторые реализации запрещают null-ключи и -значения, а некоторые имеют ограничения на типы своих ключей. Попытка вставить недопустимый ключ или значение вызывает необработанное исключение, обычно NullPointerException или ClassCastException. Попытка запросить наличие недопустимого ключа или значения может выбросить исключение или просто вернуть false; некоторые реализации будут демонстрировать первое поведение, а некоторые — второе. Более общим образом, попытка выполнить операцию с недопустимым ключом или значением, завершение которой не приведет к вставке недопустимого элемента в карту, может выбросить исключение или может завершиться успешно, по усмотрению реализации. Такие исключения отмечаются как «необязательные» в спецификации этого интерфейса.
Многие методы в интерфейсах Collections Framework определяются с точки зрения метода equals. Например, спецификация метода containsKey(Object key) гласит: «возвращает true тогда и только тогда, когда эта карта содержит сопоставление для ключа k такого, что (key==null ? k==null : key.equals(k))». Эта спецификация не должна интерпретироваться как подразумевающая, что вызов Map.containsKey с ненулевым аргументом 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.
Краткое описание вложенных классов
| 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 |
Возвращает неизменяемую карту содержащую записи из заданной карты. |
static <K, |
entry |
Возвращает неизменяемую Map.Entry содержащую заданный ключ и значение. |
Set<Map.Entry<K, |
entrySet() |
Возвращает вид Set отображений, содержащихся в этой карте. |
boolean |
equals |
Сравнивает указанный объект с этой картой на равенство. |
default void |
forEach |
Выполняет заданное действие для каждой записи в этой карте до тех пор, пока все записи не будут обработаны или действие не выбросит исключение. |
V |
get |
Возвращает значение, которому сопоставлен указанный ключ, или null, если в этой карте нет отображения для ключа. |
default V |
getOrDefault |
Возвращает значение, которому сопоставлен указанный ключ, или defaultValue, если в этой карте нет отображения для ключа. |
int |
hashCode() |
Возвращает хэш-код для этой карты. |
boolean |
isEmpty() |
Возвращает true, если эта карта не содержит сопоставлений ключ-значение. |
Set<K> |
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<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-ключей или -значений -
IllegalArgumentException- если какое-либо свойство указанного ключа или значения предотвращает его хранение в этом отображении
remove
V remove(Object key)
k к значению v такое что Objects.equals(key, k), это отображение удаляется. (Отображение может содержать не более одного такого отображения). Возвращает значение, которому это отображение ранее сопоставило ключ, или null если в отображении не было отображения для ключа.
Если это отображение допускает null-значения, то возвращаемое значение null не обязательно указывает на то, что отображение не содержало отображения для ключа; также возможно, что отображение явно сопоставило ключ со значением null.
Отображение не будет содержать отображение для указанного ключа, после того как вызов вернет результат.
- Параметры:
-
key- ключ, отображение которого нужно удалить из отображения - Возвращает:
- предыдущее значение, связанное с
key, илиnullесли дляkeyне было отображения. - Исключения:
-
UnsupportedOperationException- если операцияremoveне поддерживается этим отображением -
ClassCastException- если ключ имеет неподходящий тип для этого отображения (необязательно) -
NullPointerException- если указанный ключ равен null, и это отображение не допускает null-ключей (необязательно)
putAll
void putAll(Map<? extends K,? extends V> m)
put(k, v) для этого отображения один раз для каждого отображения от ключа k до значения v в указанном отображении. Поведение этой операции не определено, если указанное отображение модифицируется во время выполнения операции.- Параметры:
-
m- отображения, которые нужно сохранить в этом отображении - Исключения:
-
UnsupportedOperationException- если операцияputAllне поддерживается этим отображением -
ClassCastException- если класс ключа или значения в указанном отображении предотвращает его хранение в этом отображении -
NullPointerException- если указанное отображение равно null, или если это отображение не допускает null-ключей или -значений, а указанное отображение содержит null-ключи или -значения -
IllegalArgumentException- если какое-либо свойство ключа или значения в указанном отображении предотвращает его хранение в этом отображении
clear
void clear()
- Исключения:
-
UnsupportedOperationException- если операцияclearне поддерживается этим отображением
keySet
Set<K> keySet()
Set ключей, содержащихся в этом отображении. Множество поддерживается отображением, поэтому изменения в отображении отражаются в множестве, и наоборот. Если отображение модифицируется во время итерации по множеству (кроме как через собственную операцию итератора remove ), результаты итерации не определены. Множество поддерживает удаление элементов, что удаляет соответствующее отображение из отображения, посредством операций Iterator.remove, Set.remove, removeAll, retainAll, и clear. Оно не поддерживает операции add или addAll.- Возвращает:
- представление множества ключей, содержащихся в этом отображении
values
Collection<V> values()
Collection значений, содержащихся в этом отображении. Коллекция поддерживается отображением, поэтому изменения в отображении отражаются в коллекции, и наоборот. Если отображение модифицируется во время итерации по коллекции (кроме как через собственную операцию итератора remove ), результаты итерации не определены. Коллекция поддерживает удаление элементов, что удаляет соответствующее отображение из отображения, посредством операций Iterator.remove, Collection.remove, removeAll, retainAll и clear . Она не поддерживает операции add или addAll.- Возвращает:
- представление коллекции значений, содержащихся в этом отображении
entrySet
Set<Map.Entry<K,V>> entrySet()
Set сопоставлений, содержащихся в этом отображении. Множество поддерживается отображением, поэтому изменения в отображении отражаются в множестве и наоборот. Если отображение изменяется во время итерации по множеству (кроме операций самого итератора или операции 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если указанный объект равен этому отображению - См. также:
hashCode
int hashCode()
entrySet() отображения. Это гарантирует, что m1.equals(m2) подразумевает, что m1.hashCode()==m2.hashCode() для любых двух отображений m1 и m2, как требуется общим контрактом Object.hashCode().- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- значение хэш-кода для этого отображения
- См. также:
getOrDefault
default V getOrDefault(Object key, V defaultValue)
defaultValue если в этом отображении нет сопоставления для ключа.- Требования реализации:
- Базовая реализация не дает никаких гарантий о синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и задокументировать свои свойства параллельности.
- Параметры:
-
key- ключ, связанное значение которого нужно вернуть -
defaultValue- значение по умолчанию для ключа - Возвращает:
- значение, которому соответствует указанный ключ, или
defaultValueесли в этом отображении нет сопоставления для ключа - Исключения:
-
ClassCastException- если ключ неподходящего типа для этого отображения (необязательно) -
NullPointerException- если указанный ключ равен null, а это отображение не допускает null-ключей (необязательно) - С тех пор как:
- 1.8
forEach
default void forEach(BiConsumer<? super K,? super V> action)
- Требования реализации:
- Базовая реализация эквивалентна для данного
map:
Базовая реализация не дает никаких гарантий о синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и задокументировать свои свойства параллельности.for (Map.Entry<K, V> entry : map.entrySet()) action.accept(entry.getKey(), entry.getValue()); - Параметры:
-
action- действие, которое нужно выполнить для каждой записи - Исключения:
-
NullPointerException- если заданное действие равно null -
ConcurrentModificationException- если запись обнаружена удалённой во время итерации - С тех пор как:
- 1.8
replaceAll
default void replaceAll(BiFunction<? super K,? super V,? extends V> function)
- Требования реализации:
-
Базовая реализация эквивалентна для этого
map:for (Map.Entry<K, V> entry : map.entrySet()) entry.setValue(function.apply(entry.getKey(), entry.getValue()));Базовая реализация не дает никаких гарантий о синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и задокументировать свои свойства параллельности.
- Параметры:
-
function- функция, которую нужно применить к каждой записи - Исключения:
-
UnsupportedOperationException- если операцияsetне поддерживается итератором множества записей этого отображения. -
ClassCastException- если класс значения замены препятствует его хранению в этом отображении -
NullPointerException- если указанная функция или значение замены равны null, и это отображение не допускает null-значений -
ClassCastException- если значение замены неподходящего типа для этого отображения (необязательно) -
NullPointerException- если функция или значение замены равны null, и это отображение не допускает null-ключей или значений (необязательно) -
IllegalArgumentException- если какой-либо атрибут значения замены препятствует его хранению в этом отображении (необязательно) -
ConcurrentModificationException- если запись обнаружена удалённой во время итерации - С тех пор как:
- 1.8
putIfAbsent
default V putIfAbsent(K key, V value)
null), связывает его с данным значением и возвращает null, иначе возвращает текущее значение.- Требования реализации:
- Базовая реализация эквивалентна для данного
map:V v = map.get(key); if (v == null) v = map.put(key, value); return v;Базовая реализация не дает никаких гарантий о синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и задокументировать свои свойства параллельности.
- Параметры:
-
key- ключ, которому нужно сопоставить указанное значение -
value- значение, которое нужно сопоставить с указанным ключом - Возвращает:
- предыдущее значение, связанное с указанным ключом, или
nullесли для ключа не было сопоставления. (Возвратnullтакже может указывать, что отображение ранее сопоставилоnullс ключом, если реализация поддерживает null-значения.) - Исключения:
-
UnsupportedOperationException- если операцияputне поддерживается этим отображением (необязательно) -
ClassCastException- если ключ или значение неподходящего типа для этого отображения (необязательно) -
NullPointerException- если указанный ключ или значение равны null, а это отображение не допускает null-ключей или значений (необязательно) -
IllegalArgumentException- если какой-либо атрибут указанного ключа или значения препятствует его хранению в этом отображении (необязательно) - С тех пор как:
- 1.8
remove
default boolean remove(Object key, Object value)
- Требования реализации:
- Базовая реализация эквивалентна для данного
map:if (map.containsKey(key) && Objects.equals(map.get(key), value)) { map.remove(key); return true; } else return false;Базовая реализация не дает никаких гарантий о синхронизации или атомарности этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и задокументировать свои свойства параллельности.
- Параметры:
-
key- ключ, с которым связано указанное значение -
value- ожидаемое значение, связанное с указанным ключом - Возвращает:
-
trueесли значение было удалено - Исключения:
-
UnsupportedOperationException- если операцияremoveне поддерживается этим отображением (необязательно) -
ClassCastException- если ключ или значение неподходящего типа для этого отображения (необязательно) -
NullPointerException- если указанный ключ или значение равны null, а это отображение не допускает null-ключей или значений (необязательно) - С тех пор как:
- 1.8
заменить
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- если операцияputне поддерживается этой картой (необязательно) -
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- если операцияputне поддерживается этой картой (необязательно) -
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- если операцияputне поддерживается этой картой (необязательно) -
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- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно) -
IllegalArgumentException- если какое-либо свойство указанного ключа или значения препятствует его хранению в этой карте (необязательно) - С:
- 1.8
compute
default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
null если текущего отображения нет). Например, для создания или добавления String сообщения к сопоставленному значению:
map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg)) (Метод merge() часто проще использовать в таких целях.) Если функция переназначения возвращает null, отображение удаляется (или остается отсутствующим, если оно изначально отсутствовало). Если сама функция переназначения вызывает (непроверенное) исключение, исключение перебрасывается, а текущее отображение остается неизменным.
Функция переназначения не должна изменять эту карту во время вычисления.
- Implementation Requirements:
- Реализация по умолчанию эквивалентна выполнению следующих шагов для этой
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должны документировать, применяется ли функция переназначения один раз атомарно только если значение отсутствует. - Parameters:
-
key- ключ, с которым должно быть связано указанное значение -
remappingFunction- функция переназначения для вычисления значения - Returns:
- новое значение, связанное с указанным ключом, или null, если нет
- Throws:
-
NullPointerException- если указанный ключ равен null, а эта карта не поддерживает ключи null, или remappingFunction равен null -
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно) -
IllegalArgumentException- если какое-либо свойство указанного ключа или значения препятствует его хранению в этой карте (необязательно) - Since:
- 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, отображение удаляется. Если сама функция переназначения вызывает (непроверенное) исключение, исключение перебрасывается, а текущее отображение остается неизменным.
Функция переназначения не должна изменять эту карту во время вычисления.
- Implementation Requirements:
- Реализация по умолчанию эквивалентна выполнению следующих шагов для этой
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должны документировать, применяется ли функция переназначения один раз атомарно только если значение отсутствует. - Parameters:
-
key- ключ, с которым должно быть связано результирующее значение -
value- ненулевое значение, которое должно быть объединено с существующим значением, связанным с ключом, или, если нет существующего значения или значение null связано с ключом, которое должно быть связано с ключом -
remappingFunction- функция переназначения для повторного вычисления значения, если оно есть - Returns:
- новое значение, связанное с указанным ключом, или null, если с ключом не связано никакого значения
- Throws:
-
UnsupportedOperationException- если операцияputне поддерживается этой картой (необязательно) -
ClassCastException- если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно) -
IllegalArgumentException- если какое-либо свойство указанного ключа или значения препятствует его хранению в этой карте (необязательно) -
NullPointerException- если указанный ключ равен null, а эта карта не поддерживает ключи null, или значение или remappingFunction равны null - Since:
- 1.8
of
static <K, V> Map<K,V> of()
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Returns:
- пустая
Map - Since:
- 9
of
static <K, V> Map<K,V> of(K k1, V v1)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ отображения -
v1- значение отображения - Returns:
Mapсодержащую указанное отображение- Throws:
-
NullPointerException- если ключ или значениеnull - Since:
- 9
of
static <K, V> Map<K,V> of(K k1, V v1, K k2, V v2)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ первого отображения -
v1- значение первого отображения -
k2- ключ второго отображения -
v2- значение второго отображения - Returns:
Mapсодержащую указанные отображения- Throws:
-
IllegalArgumentException- если ключи дублируются -
NullPointerException- если любой ключ или значениеnull - Since:
- 9
of
static <K, V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ первого отображения -
v1- значение первого отображения -
k2- ключ второго отображения -
v2- значение второго отображения -
k3- ключ третьего отображения -
v3- значение третьего отображения - Returns:
Mapсодержащую указанные отображения- Throws:
-
IllegalArgumentException- если есть дублирующиеся ключи -
NullPointerException- если любой ключ или значениеnull - Since:
- 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)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ первого сопоставления -
v1- значение первого сопоставления -
k2- ключ второго сопоставления -
v2- значение второго сопоставления -
k3- ключ третьего сопоставления -
v3- значение третьего сопоставления -
k4- ключ четвертого сопоставления -
v4- значение четвертого сопоставления - Returns:
- a
Map, содержащую указанные сопоставления - Throws:
-
IllegalArgumentException- если есть дубликаты ключей -
NullPointerException- если любой ключ или значениеnull - Since:
- 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)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ первого сопоставления -
v1- значение первого сопоставления -
k2- ключ второго сопоставления -
v2- значение второго сопоставления -
k3- ключ третьего сопоставления -
v3- значение третьего сопоставления -
k4- ключ четвертого сопоставления -
v4- значение четвертого сопоставления -
k5- ключ пятого сопоставления -
v5- значение пятого сопоставления - Returns:
- a
Map, содержащую указанные сопоставления - Throws:
-
IllegalArgumentException- если есть дубликаты ключей -
NullPointerException- если любой ключ или значениеnull - Since:
- 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)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ первого сопоставления -
v1- значение первого сопоставления -
k2- ключ второго сопоставления -
v2- значение второго сопоставления -
k3- ключ третьего сопоставления -
v3- значение третьего сопоставления -
k4- ключ четвертого сопоставления -
v4- значение четвертого сопоставления -
k5- ключ пятого сопоставления -
v5- значение пятого сопоставления -
k6- ключ шестого сопоставления -
v6- значение шестого сопоставления - Returns:
- a
Map, содержащую указанные сопоставления - Throws:
-
IllegalArgumentException- если есть дубликаты ключей -
NullPointerException- если любой ключ или значениеnull - Since:
- 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)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ первого сопоставления -
v1- значение первого сопоставления -
k2- ключ второго сопоставления -
v2- значение второго сопоставления -
k3- ключ третьего сопоставления -
v3- значение третьего сопоставления -
k4- ключ четвертого сопоставления -
v4- значение четвертого сопоставления -
k5- ключ пятого сопоставления -
v5- значение пятого сопоставления -
k6- ключ шестого сопоставления -
v6- значение шестого сопоставления -
k7- ключ седьмого сопоставления -
v7- значение седьмого сопоставления - Returns:
- a
Map, содержащую указанные сопоставления - Throws:
-
IllegalArgumentException- если есть дубликаты ключей -
NullPointerException- если любой ключ или значениеnull - Since:
- 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)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ первого сопоставления -
v1- значение первого сопоставления -
k2- ключ второго сопоставления -
v2- значение второго сопоставления -
k3- ключ третьего сопоставления -
v3- значение третьего сопоставления -
k4- ключ четвертого сопоставления -
v4- значение четвертого сопоставления -
k5- ключ пятого сопоставления -
v5- значение пятого сопоставления -
k6- ключ шестого сопоставления -
v6- значение шестого сопоставления -
k7- ключ седьмого сопоставления -
v7- значение седьмого сопоставления -
k8- ключ восьмого сопоставления -
v8- значение восьмого сопоставления - Returns:
- a
Map, содержащую указанные сопоставления - Throws:
-
IllegalArgumentException- если есть дубликаты ключей -
NullPointerException- если любой ключ или значениеnull - Since:
- 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)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ первого сопоставления -
v1- значение первого сопоставления -
k2- ключ второго сопоставления -
v2- значение второго сопоставления -
k3- ключ третьего сопоставления -
v3- значение третьего сопоставления -
k4- ключ четвертого сопоставления -
v4- значение четвертого сопоставления -
k5- ключ пятого сопоставления -
v5- значение пятого сопоставления -
k6- ключ шестого сопоставления -
v6- значение шестого сопоставления -
k7- ключ седьмого сопоставления -
v7- значение седьмого сопоставления -
k8- ключ восьмого сопоставления -
v8- значение восьмого сопоставления -
k9- ключ девятого сопоставления -
v9- значение девятого сопоставления - Returns:
- a
Map, содержащую указанные сопоставления - Throws:
-
IllegalArgumentException- если есть дубликаты ключей -
NullPointerException- если любой ключ или значениеnull - Since:
- 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)
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
k1- ключ первого сопоставления -
v1- значение первого сопоставления -
k2- ключ второго сопоставления -
v2- значение второго сопоставления -
k3- ключ третьего сопоставления -
v3- значение третьего сопоставления -
k4- ключ четвертого сопоставления -
v4- значение четвертого сопоставления -
k5- ключ пятого сопоставления -
v5- значение пятого сопоставления -
k6- ключ шестого сопоставления -
v6- значение шестого сопоставления -
k7- ключ седьмого сопоставления -
v7- значение седьмого сопоставления -
k8- ключ восьмого сопоставления -
v8- значение восьмого сопоставления -
k9- ключ девятого сопоставления -
v9- значение девятого сопоставления -
k10- ключ десятого сопоставления -
v10- значение десятого сопоставления - Returns:
- a
Map, содержащую указанные сопоставления - Throws:
-
IllegalArgumentException- если имеются дубликаты ключей -
NullPointerException- если любой ключ или значениеnull - Since:
- 9
ofEntries
@SafeVarargs static <K, V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)
- API Note:
- Удобно создавать пары с помощью метода
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")); - Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
entries-Map.Entryсодержащие ключи и значения, из которых заполняется карта - Returns:
- a
Map, содержащую указанные сопоставления - Throws:
-
IllegalArgumentException- если имеются дубликаты ключей -
NullPointerException- если любая пара, ключ или значениеnull, или если массивentriesnull - Since:
- 9
- See Also:
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 Note:
- Для сериализуемой
Entry, см.AbstractMap.SimpleEntryилиAbstractMap.SimpleImmutableEntry. - Type Parameters:
-
K- тип ключа -
V- тип значения - Parameters:
-
k- ключ -
v- значение - Returns:
- a
Entry, содержащая указанный ключ и значение - Throws:
-
NullPointerException- если ключ или значениеnull - Since:
- 9
- See Also:
copyOf
static <K, V> Map<K,V> copyOf(Map<? extends K,? extends V> map)
- Implementation Note:
- Если заданная карта является неизменяемой картой, вызов copyOf обычно не создаст копию.
- Type Parameters:
-
K- тип ключаMap -
V- тип значенияMap - Parameters:
-
map-Map, из которой извлекаются пары, не должна быть null - Returns:
- a
Map, содержащую пары заданнойMap - Throws:
-
NullPointerException- если карта null, или если она содержит null ключи или значения - Since:
- 10
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Map.html