Spec-Zone.ru › OpenJDK 8

Интерфейс Map<K,V>

Параметры типа:
K - тип ключей, поддерживаемых этой картой
V - тип сопоставленных значений
Все известные подинтерфейсы:
Bindings, ConcurrentMap<K,V>, ConcurrentNavigableMap<K,V>, LogicalMessageContext, MessageContext, NavigableMap<K,V>, SOAPMessageContext, SortedMap<K,V>
Все известные реализующие классы:
AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, ConcurrentSkipListMap, EnumMap, HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons, Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport, TreeMap, UIDefaults, WeakHashMap

public interface Map<K,V>

Объект, сопоставляющий ключи со значениями. Карта не может содержать дублирующих ключей; каждый ключ может сопоставляться с не более чем одним значением.

Этот интерфейс заменяет класс Dictionary, который был совершенно абстрактным классом, а не интерфейсом.

Интерфейс Map предоставляет три представления коллекций, которые позволяют просматривать содержимое карты как множество ключей, коллекцию значений или множество пар "ключ-значение". Порядок карты определяется порядком, в котором итераторы представлений коллекций карты возвращают свои элементы. Некоторые реализации карт, такие как класс TreeMap, гарантируют определённый порядок; другие, например, класс HashMap, такого порядка не гарантируют.

Примечание: необходимо проявлять особую осторожность, если в качестве ключей карты используются изменяемые объекты. Поведение карты не определено, если значение объекта изменяется таким образом, что влияет на сравнения equals в то время, когда объект является ключом в карте. Особо важным случаем этого запрета является то, что карта не может содержать саму себя в качестве ключа. Хотя карта может содержать саму себя в качестве значения, рекомендуется крайняя осторожность: методы equals и hashCode для такой карты больше не определены должным образом.

Все реализации карт общего назначения должны предоставлять два «стандартных» конструктора: конструктор без аргументов, создающий пустую карту, и конструктор с одним аргументом типа Map, создающий новую карту с теми же парами «ключ-значение», что и у аргумента. По сути, последний конструктор позволяет пользователю копировать любую карту, создавая эквивалентную карту желаемого класса. Нет способа обеспечить соблюдение этого рекомендации (так как интерфейсы не могут содержать конструкторы), но все реализации карт общего назначения в JDK соответствуют ему.

«Деструктивные» методы, содержащиеся в этом интерфейсе, то есть методы, которые изменяют карту, на которой они работают, определены как такие, которые выбрасывают UnsupportedOperationException, если эта карта не поддерживает операцию. В этом случае эти методы могут, но не обязаны, выбросить UnsupportedOperationException, если вызов не окажет никакого эффекта на карту. Например, вызов метода putAll(Map) на неизменяемой карте может, но не обязан, выбросить исключение, если карта, чьи отображения должны быть «наложены», пуста.

Некоторые реализации карт имеют ограничения на ключи и значения, которые они могут содержать. Например, некоторые реализации запрещают null-ключи и значения, а некоторые имеют ограничения на типы своих ключей. Попытка вставить недопустимый ключ или значение приводит к выбросу необработанного исключения, обычно NullPointerException или ClassCastException. Попытка запросить наличие недопустимого ключа или значения может привести к выбросу исключения или просто вернуть false; некоторые реализации будут демонстрировать первое поведение, а некоторые — второе. Более общо, попытка операции с недопустимым ключом или значением, завершение которой не приведёт к вставке недопустимого элемента в карту, может привести к выбросу исключения или может завершиться успешно, по усмотрению реализации. Такие исключения отмечены как «необязательные» в спецификации этого интерфейса.

Многие методы в интерфейсах Collections Framework определены с точки зрения метода equals. Например, спецификация для метода containsKey(Object key) гласит: «возвращает true тогда и только тогда, когда эта карта содержит отображение для ключа k такого, что (key==null ? k==null : key.equals(k))». Эта спецификация не должна интерпретироваться как утверждение о том, что вызов Map.containsKey с не-null аргументом key приведет к вызову key.equals(k) для любого ключа k. Реализации могут свободно реализовывать оптимизации, при которых вызов equals избегается, например, путём предварительного сравнения кодов хеширования двух ключей. (Спецификация Object.hashCode() гарантирует, что два объекта с разными кодами хеширования не могут быть равны.) Более общо, реализации различных интерфейсов Collections Framework могут использовать указанное поведение методов базовых Object методов там, где реализатор сочтёт это уместным.

Некоторые операции с картой, выполняющие рекурсивное обход карты, могут завершиться исключением для самоссылочных экземпляров, где карта непосредственно или косвенно содержит саму себя. Это включает в себя методы clone(), equals(), hashCode() и toString(). Реализации могут по желанию обрабатывать сценарий самоссылок, однако большинство текущих реализаций этого не делают.

Этот интерфейс является членом Java Collections Framework.

С:
1.2
См. также:
HashMap, TreeMap, Hashtable, SortedMap, Collection, Set

Вложенные классы

Модификатор и тип Интерфейс и описание
static interface  Map.Entry<K,V>

Элемент карты (пара «ключ-значение»).

Методы

Модификатор и тип Метод и описание
void clear()

Удаляет все сопоставления из этого отображения (необязательная операция).

default V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)

Попытка вычислить сопоставление для указанного ключа и его текущего сопоставленного значения (или null, если текущего сопоставления нет).

default V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)

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

default V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)

Если значение для указанного ключа присутствует и не равно null, попытка вычислить новое сопоставление, учитывая ключ и его текущее сопоставленное значение.

boolean containsKey(Object key)

Возвращает true если это отображение содержит сопоставление для указанного ключа.

boolean containsValue(Object value)

Возвращает true если это отображение сопоставляет один или несколько ключей со значением.

Set<Map.Entry<K,V>> entrySet()

Возвращает отображение Set сопоставлений, содержащихся в этом отображении.

boolean equals(Object o)

Сравнивает указанный объект с этим отображением на равенство.

default void forEach(BiConsumer<? super K,? super V> action)

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

V get(Object key)

Возвращает значение, которому сопоставлен указанный ключ, или null, если это отображение не содержит сопоставления для ключа.

default V getOrDefault(Object key, V defaultValue)

Возвращает значение, которому сопоставлен указанный ключ, или defaultValue, если это отображение не содержит сопоставления для ключа.

int hashCode()

Возвращает значение хэш-кода для этого отображения.

boolean isEmpty()

Возвращает true, если это отображение не содержит сопоставлений ключ-значение.

Set<K> keySet()

Возвращает отображение Set ключей, содержащихся в этом отображении.

default V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)

Если указанный ключ ещё не связан со значением или связан с null, связывает его с заданным ненулевым значением.

V put(K key, V value)

Связывает указанное значение с указанным ключом в этом отображении (необязательная операция).

void putAll(Map<? extends K,? extends V> m)

Копирует все сопоставления из указанного отображения в это отображение (необязательная операция).

default V putIfAbsent(K key, V value)

Если указанный ключ ещё не связан со значением (или сопоставлен с null) связывает его с заданным значением и возвращает null, иначе возвращает текущее значение.

V remove(Object key)

Удаляет сопоставление для ключа из этого отображения, если оно присутствует (необязательная операция).

default boolean remove(Object key, Object value)

Удаляет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена ​​с указанным значением.

default V replace(K key, V value)

Заменяет запись для указанного ключа только в том случае, если она в настоящее время сопоставлена ​​с каким-либо значением.

default boolean replace(K key, V oldValue, V newValue)

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

default void replaceAll(BiFunction<? super K,? super V,? extends V> function)

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

int size()

Возвращает количество сопоставлений ключ-значение в этом отображении.

Collection<V> values()

Возвращает отображение Collection значений, содержащихся в этом отображении.

Методы

size

int size()

Возвращает количество пар ключ-значение в этом отображении. Если отображение содержит более Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE.

Возвращает:
количество пар ключ-значение в этом отображении

isEmpty

boolean isEmpty()

Возвращает true, если это отображение не содержит пар ключ-значение.

Возвращает:
true, если это отображение не содержит пар ключ-значение

containsKey

boolean containsKey(Object key)

Возвращает true, если это отображение содержит сопоставление для указанного ключа. Более формально, возвращает true тогда и только тогда, когда это отображение содержит сопоставление для ключа k такого, что (key==null ? k==null : key.equals(k)). (Может быть не более одного такого сопоставления.)

Параметры:
key - ключ, присутствие которого в этом отображении нужно проверить
Возвращает:
true, если это отображение содержит сопоставление для указанного ключа
Исключения:
ClassCastException - если ключ неподходящего типа для этого отображения (необязательно)
NullPointerException - если указанный ключ равен null, и это отображение не допускает null-ключей (необязательно)

containsValue

boolean containsValue(Object value)

Возвращает true, если это отображение сопоставляет один или несколько ключей со значением. Более формально, возвращает true тогда и только тогда, когда это отображение содержит как минимум одно сопоставление со значением v такое, что (value==null ? v==null : value.equals(v)). Для большинства реализаций интерфейса Map эта операция, вероятно, потребует времени, линейного относительно размера отображения.

Параметры:
value - значение, присутствие которого в этом отображении нужно проверить
Возвращает:
true, если это отображение сопоставляет один или несколько ключей со значением
Исключения:
ClassCastException - если значение неподходящего типа для этого отображения (необязательно)
NullPointerException - если указанное значение равно null, и это отображение не допускает null-значений (необязательно)

get

V get(Object key)

Возвращает значение, которому сопоставлен указанный ключ, или null если в этом отображении нет сопоставления для ключа.

Более формально, если это отображение содержит сопоставление от ключа k к значению v такое, что (key==null ? k==null : key.equals(k)), то этот метод возвращает v; в противном случае он возвращает null. (Может быть не более одного такого сопоставления.)

Если это отображение допускает null-значения, то возвращаемое значение null не обязательно указывает, что отображение не содержит сопоставления для ключа; также возможно, что отображение явно сопоставляет ключ со значением null. Операция containsKey может использоваться для различения этих двух случаев.

Параметры:
key - ключ, ассоциированное значение которого требуется вернуть
Возвращает:
значение, которому сопоставлен указанный ключ, или null если в этом отображении нет сопоставления для ключа
Исключения:
ClassCastException - если ключ неподходящего типа для этого отображения (необязательно)
NullPointerException - если указанный ключ равен null, и это отображение не допускает null-ключей (необязательно)

put

V put(K key,
      V value)

Сопоставляет указанное значение с указанным ключом в этом отображении (необязательная операция). Если отображение ранее содержало сопоставление для ключа, старое значение заменяется указанным значением. (Отображение m считается содержащим сопоставление для ключа k тогда и только тогда, когда m.containsKey(k) вернёт true.)

Параметры:
key - ключ, с которым должно быть ассоциировано указанное значение
value - значение, которое должно быть ассоциировано с указанным ключом
Возвращает:
предыдущее значение, связанное с key, или null если для key не было сопоставления. (Возвращаемое значение null также может указывать, что отображение ранее ассоциировало null со значением key, если реализация поддерживает null значения.)
Исключения:
UnsupportedOperationException - если операция put не поддерживается этим отображением
ClassCastException - если класс указанного ключа или значения препятствует его хранению в этом отображении
NullPointerException - если указанный ключ или значение равно null, и это отображение не допускает null-ключей или -значений
IllegalArgumentException - если какие-либо свойства указанного ключа или значения препятствуют его хранению в этом отображении

remove

V remove(Object key)

Удаляет сопоставление для ключа из этого отображения, если оно присутствует (необязательная операция). Более формально, если это отображение содержит сопоставление от ключа k к значению v такое, что (key==null ? k==null : key.equals(k)), то это сопоставление удаляется. (Отображение может содержать не более одного такого сопоставления.)

Возвращает значение, которое это отображение ранее ассоциировало с ключом, или null если отображение не содержало сопоставления для ключа.

Если это отображение допускает null-значения, то возвращаемое значение null не обязательно указывает, что отображение не содержало сопоставления для ключа; также возможно, что отображение явно сопоставило ключ со значением null.

Отображение не будет содержать сопоставление для указанного ключа после возвращения вызова.

Параметры:
key - ключ, сопоставление которого должно быть удалено из отображения
Возвращает:
предыдущее значение, ассоциированное с key, или null если для key не было сопоставления.
Исключения:
UnsupportedOperationException - если операция remove не поддерживается этим отображением
ClassCastException - если ключ неподходящего типа для этого отображения (необязательно)
NullPointerException - если указанный ключ равен null, и это отображение не допускает null-ключей (необязательно)

putAll

void putAll(Map<? extends K,? extends V> m)

Копирует все сопоставления из указанного отображения в это отображение (необязательная операция). Эффект этого вызова эквивалентен вызову put(k, v) для этого отображения один раз для каждого сопоставления ключа k со значением v в указанном отображении. Поведение этой операции не определено, если указанное отображение изменяется во время выполнения операции.

Параметры:
m - сопоставления, которые должны быть сохранены в этом отображении
Исключения:
UnsupportedOperationException - если операция putAll не поддерживается этим отображением
ClassCastException - если класс ключа или значения в указанном отображении препятствует его хранению в этом отображении
NullPointerException - если указанное отображение равно null, или если это отображение не допускает null-ключей или -значений, и указанное отображение содержит null-ключи или -значения
IllegalArgumentException - если какие-либо свойства ключа или значения в указанном отображении препятствуют его хранению в этом отображении

clear

void clear()

Удаляет все сопоставления из этого отображения (необязательная операция). Отображение будет пустым после возвращения вызова.

Исключения:
UnsupportedOperationException - если операция clear не поддерживается этим отображением

keySet

Set<K> keySet()

Возвращает представление Set ключей, содержащихся в этом отображении. Множество поддерживается отображением, поэтому изменения в отображении отражаются в множестве и наоборот. Если отображение изменяется во время итерации по множеству (кроме операций через собственный итератор remove ), результаты итерации не определены. Множество поддерживает удаление элементов, которые удаляют соответствующее сопоставление из отображения, через операции Iterator.remove, Set.remove, removeAll, retainAll, и clear. Оно не поддерживает операции add или addAll.

Возвращает:
представление множества ключей, содержащихся в этом отображении

values

Collection<V> values()

Возвращает представление Collection значений, содержащихся в этом отображении. Коллекция поддерживается отображением, поэтому изменения в отображении отражаются в коллекции и наоборот. Если отображение изменяется во время итерации по коллекции (кроме операций через собственный итератор remove ), результаты итерации не определены. Коллекция поддерживает удаление элементов, которые удаляют соответствующее сопоставление из отображения, через операции Iterator.remove, Collection.remove, removeAll, retainAll и clear. Она не поддерживает операции add или addAll.

Возвращает:
представление коллекции значений, содержащихся в этом отображении

entrySet

Set<Map.Entry<K,V>> entrySet()

Возвращает представление Set сопоставлений, содержащихся в этом отображении. Множество поддерживается отображением, поэтому изменения в отображении отражаются в множестве и наоборот. Если отображение изменяется во время итерации по множеству (кроме операций через собственный итератор remove или операции setValue над элементом отображения, возвращенным итератором), результаты итерации не определены. Множество поддерживает удаление элементов, которые удаляют соответствующее сопоставление из отображения, через операции Iterator.remove, Set.remove, removeAll, retainAll и clear. Она не поддерживает операции add или addAll.

Возвращает:
представление множества сопоставлений, содержащихся в этом отображении

equals

boolean equals(Object o)

Сравнивает указанный объект с этим отображением на равенство. Возвращает true , если заданный объект также является отображением, и два отображения представляют одни и те же сопоставления. Более формально, два отображения m1 и m2 представляют одни и те же сопоставления, если m1.entrySet().equals(m2.entrySet()). Это гарантирует, что метод equals работает корректно при различных реализациях интерфейса Map.

Переопределяет:
equals в классе Object
Параметры:
o - объект, который необходимо сравнить на равенство с этим отображением
Возвращает:
true , если указанный объект равен этому отображению
См. также:
Object.hashCode(), HashMap

hashCode

int hashCode()

Возвращает значение хэш-кода для этого отображения. Хэш-код отображения определяется как сумма хэш-кодов каждой записи в представлении entrySet() отображения. Это гарантирует, что m1.equals(m2) подразумевает m1.hashCode()==m2.hashCode() для любых двух отображений m1 и m2, как требуется общим соглашением Object.hashCode().

Переопределяет:
hashCode в классе Object
Возвращает:
значение хэш-кода для этого отображения
См. также:
Map.Entry.hashCode(), Object.equals(Object), equals(Object)

getOrDefault

default V getOrDefault(Object key,
                       V defaultValue)

Возвращает значение, которому сопоставлен указанный ключ, или defaultValue , если в этом отображении нет сопоставления для ключа.

Требования к реализации:
Базовая реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и документировать свои свойства конкурентности.
Параметры:
key - ключ, связанное значение которого должно быть возвращено
defaultValue - значение по умолчанию для ключа
Возвращает:
значение, которому сопоставлен указанный ключ, или defaultValue , если в этом отображении нет сопоставления для ключа
Исключения:
ClassCastException - если ключ имеет неподходящий тип для этого отображения (необязательно)
NullPointerException - если указанный ключ равен null, и это отображение не допускает null-ключей (необязательно)
С:
1.8

forEach

default void forEach(BiConsumer<? super K,? super V> action)

Выполняет заданное действие для каждой записи в этом отображении, пока все записи не будут обработаны или действие не выбросит исключение. Если не указано иначе реализующим классом, действия выполняются в порядке итерации набора записей (если порядок итерации указан). Исключения, выброшенные действием, передаются вызывающему методу.

Требования к реализации:
Базовая реализация эквивалентна для этого map:
for (Map.Entry<K, V> entry : map.entrySet())
     action.accept(entry.getKey(), entry.getValue());
Базовая реализация не гарантирует синхронизацию или атомарность этого метода. Любая реализация, предоставляющая гарантии атомарности, должна переопределить этот метод и документировать свои свойства конкурентности.
Параметры:
action - действие, которое должно быть выполнено для каждой записи
Исключения:
NullPointerException - если указанное действие равно null
ConcurrentModificationException - если запись удаляется во время итерации
С:
1.8

replaceAll

default void replaceAll(BiFunction<? super K,? super V,? extends V> function)

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

Требования к реализации:

Базовая реализация эквивалентна для этого map:

for (Map.Entry<K, V> entry : map.entrySet())
     entry.setValue(function.apply(entry.getKey(), entry.getValue()));

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

Параметры:
function - функция, применяемая к каждой записи
Исключения:
UnsupportedOperationException - если операция set не поддерживается итератором набора записей этого отображения.
ClassCastException - если класс значения замены не позволяет сохранить его в этом отображении
NullPointerException - если указанная функция или значение замены равны null, и это отображение не допускает null-значений
ClassCastException - если значение замены имеет неподходящий тип для этого отображения (необязательно)
NullPointerException - если функция или значение замены равны null, и это отображение не допускает null-ключей или значений (необязательно)
IllegalArgumentException - если какой-либо атрибут значения замены не позволяет сохранить его в этом отображении (необязательно)
ConcurrentModificationException - если запись была удалена во время итерации
С:
1.8

putIfAbsent

default V putIfAbsent(K key,
                      V value)

Если указанный ключ не ассоциирован со значением (или сопоставлен с null) ассоциирует его с заданным значением и возвращает null, иначе возвращает текущее значение.

Требования к реализации:
Базовая реализация эквивалентна для этого map:
V v = map.get(key);
 if (v == null)
     v = map.put(key, value);

 return v;

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

Параметры:
key - ключ, с которым должно быть ассоциировано заданное значение
value - значение, которое должно быть ассоциировано с указанным ключом
Возвращает:
предыдущее значение, связанное с указанным ключом, или null , если для ключа не было сопоставления. (Возврат null может также указывать, что отображение ранее ассоциировало null с ключом, если реализация поддерживает null-значения.)
Исключения:
UnsupportedOperationException - если операция put не поддерживается этим отображением (необязательно)
ClassCastException - если ключ или значение имеют неподходящий тип для этого отображения (необязательно)
NullPointerException - если указанный ключ или значение равны null, и это отображение не допускает null-ключей или значений (необязательно)
IllegalArgumentException - если какой-либо атрибут указанного ключа или значения не позволяет сохранить его в этом отображении (необязательно)
С:
1.8

remove

default boolean remove(Object key,
                       Object value)

Удаляет запись для указанного ключа только в том случае, если она в данный момент сопоставлена с указанным значением.

Требования к реализации:
Базовая реализация эквивалентна для этого map:
if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
     map.remove(key);
     return true;
 } else
     return false;

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

Параметры:
key - ключ, с которым ассоциировано указанное значение
value - ожидаемое значение, ассоциированное с указанным ключом
Возвращает:
true , если значение было удалено
Исключения:
UnsupportedOperationException - если операция remove не поддерживается этим отображением (необязательно)
ClassCastException - если ключ или значение имеют неподходящий тип для этого отображения (необязательно)
NullPointerException - если указанный ключ или значение равны null, и это отображение не допускает null-ключей или значений (необязательно)
С:
1.8

replace

default boolean replace(K key,
                        V oldValue,
                        V newValue)

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

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

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

Параметры:
key - ключ, с которым ассоциировано указанное значение
oldValue - ожидаемое значение, ассоциированное с указанным ключом
newValue - значение, которое должно быть ассоциировано с указанным ключом
Возвращает:
true , если значение было заменено
Исключения:
UnsupportedOperationException - если операция put не поддерживается этим отображением (необязательно)
ClassCastException - если класс указанного ключа или значения не позволяет сохранить его в этом отображении
NullPointerException - если указанный ключ или newValue равны null, и это отображение не допускает null-ключей или значений
NullPointerException - если oldValue равно null, и это отображение не допускает null-значений (необязательно)
IllegalArgumentException - если какой-либо атрибут указанного ключа или значения не позволяет сохранить его в этом отображении
С:
1.8

replace

default V replace(K key,
                  V value)

Заменяет запись для указанного ключа только в том случае, если она в данный момент сопоставлена с каким-либо значением.

Требования к реализации:
Стандартная реализация эквивалентна следующему для этого map:
if (map.containsKey(key)) {
     return map.put(key, value);
 } else
     return null;

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

Параметры:
key - ключ, с которым связано указанное значение
value - значение, которое должно быть связано с указанным ключом
Возвращает:
предыдущее значение, связанное с указанным ключом, или null если для ключа не было сопоставления. (Возврат null также может указывать, что карта ранее связывала null с ключом, если реализация поддерживает значения null.)
Выбрасывает:
UnsupportedOperationException - если операция put не поддерживается этой картой (необязательно)
ClassCastException - если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно)
NullPointerException - если указанный ключ или значение равно null, а эта карта не допускает null-ключей или null-значений
IllegalArgumentException - если какой-либо атрибут указанного ключа или значения препятствует его хранению в этой карте
С момента:
1.8

computeIfAbsent

default V computeIfAbsent(K key,
                          Function<? super K,? extends V> mappingFunction)

Если указанный ключ еще не связан со значением (или сопоставлен с null), пытается вычислить его значение с помощью заданной функции сопоставления и поместить его в эту карту, если null.

Если функция возвращает null, сопоставление не записывается. Если сама функция вызывает (необработанное) исключение, исключение перебрасывается, и сопоставление не записывается. Наиболее распространенное использование заключается в создании нового объекта, служащего начальным сопоставленным значением или кешированным результатом, как в следующем примере:

map.computeIfAbsent(key, k -> new Value(f(k)));

Или для реализации многозначной карты, Map<K,Collection<V>>, поддерживающей несколько значений на один ключ:

map.computeIfAbsent(key, k -> new HashSet<V>()).add(v);
Требования к реализации:
Стандартная реализация эквивалентна следующим шагам для этого map, а затем возвращает текущее значение или null, если оно отсутствует сейчас:
if (map.get(key) == null) {
     V newValue = mappingFunction.apply(key);
     if (newValue != null)
         map.put(key, newValue);
 }

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

Параметры:
key - ключ, с которым должно быть связано указанное значение
mappingFunction - функция для вычисления значения
Возвращает:
текущее (существующее или вычисленное) значение, связанное с указанным ключом, или null, если вычисленное значение равно null
Выбрасывает:
NullPointerException - если указанный ключ равен null, и эта карта не поддерживает null-ключи, или mappingFunction равен null
UnsupportedOperationException - если операция put не поддерживается этой картой (необязательно)
ClassCastException - если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно)
С момента:
1.8

computeIfPresent

default V computeIfPresent(K key,
                           BiFunction<? super K,? super V,? extends V> remappingFunction)

Если значение для указанного ключа присутствует и не равно null, пытается вычислить новое сопоставление, используя ключ и его текущее сопоставленное значение.

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

Требования к реализации:
Стандартная реализация эквивалентна выполнению следующих шагов для этого map, затем возвращает текущее значение или null если оно отсутствует:
if (map.get(key) != null) {
     V oldValue = map.get(key);
     V newValue = remappingFunction.apply(key, oldValue);
     if (newValue != null)
         map.put(key, newValue);
     else
         map.remove(key);
 }

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

Параметры:
key - ключ, с которым должно быть связано указанное значение
remappingFunction - функция для вычисления значения
Возвращает:
новое значение, связанное с указанным ключом, или null, если нет
Выбрасывает:
NullPointerException - если указанный ключ равен null, и эта карта не поддерживает null-ключи, или remappingFunction равен null
UnsupportedOperationException - если операция put не поддерживается этой картой (необязательно)
ClassCastException - если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно)
С момента:
1.8

compute

default V compute(K key,
                  BiFunction<? super K,? super V,? extends V> remappingFunction)

Пытается вычислить сопоставление для указанного ключа и его текущего сопоставленного значения (или null если текущего сопоставления нет). Например, чтобы либо создать, либо добавить String сообщение к сопоставленному значению:

map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
(Метод merge() часто проще использовать в таких целях.)

Если функция возвращает null, сопоставление удаляется (или остается отсутствующим, если изначально отсутствовало). Если сама функция вызывает (необработанное) исключение, исключение перебрасывается, и текущее сопоставление остается без изменений.

Требования к реализации:
Стандартная реализация эквивалентна выполнению следующих шагов для этого map, затем возвращает текущее значение или null если отсутствует:
V oldValue = map.get(key);
 V newValue = remappingFunction.apply(key, oldValue);
 if (oldValue != null ) {
    if (newValue != null)
       map.put(key, newValue);
    else
       map.remove(key);
 } else {
    if (newValue != null)
       map.put(key, newValue);
    else
       return null;
 }

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

Параметры:
key - ключ, с которым должно быть связано указанное значение
remappingFunction - функция для вычисления значения
Возвращает:
новое значение, связанное с указанным ключом, или null, если нет
Выбрасывает:
NullPointerException - если указанный ключ равен null, и эта карта не поддерживает null-ключи, или remappingFunction равен null
UnsupportedOperationException - если операция put не поддерживается этой картой (необязательно)
ClassCastException - если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно)
С момента:
1.8

merge

default V merge(K key,
                V value,
                BiFunction<? super V,? super V,? extends V> remappingFunction)

Если указанный ключ еще не связан со значением или связан с null, связывает его с заданным ненулевым значением. В противном случае заменяет связанное значение результатом заданной функции перевычисления или удаляет, если результат равен null. Этот метод может быть полезен при объединении нескольких сопоставленных значений для ключа. Например, чтобы либо создать, либо добавить String msg к сопоставленному значению:

map.merge(key, msg, String::concat)

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

Требования к реализации:
Стандартная реализация эквивалентна выполнению следующих шагов для этого map, затем возвращает текущее значение или null если отсутствует:
V oldValue = map.get(key);
 V newValue = (oldValue == null) ? value :
              remappingFunction.apply(oldValue, value);
 if (newValue == null)
     map.remove(key);
 else
     map.put(key, newValue);

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

Параметры:
key - ключ, с которым будет связано результирующее значение
value - ненулевое значение, которое должно быть объединено с существующим значением, связанным с ключом, или, если нет существующего значения или значение null связано с ключом, должно быть связано с ключом
remappingFunction - функция для перевычисления значения, если оно существует
Возвращает:
новое значение, связанное с указанным ключом, или null, если значение не связано с ключом
Выбрасывает:
UnsupportedOperationException - если операция put не поддерживается этой картой (необязательно)
ClassCastException - если класс указанного ключа или значения препятствует его хранению в этой карте (необязательно)
NullPointerException - если указанный ключ равен null, и эта карта не поддерживает null-ключи, или значение или remappingFunction равно null
С момента:
1.8

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

Spec-Zone.ru

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