Spec-Zone .ru
спецификации, руководства, описания, API
|
K
- тип ключей сохраняется этой картойV
- тип отображенных значенийpublic interface Map<K,V>
Этот интерфейс берет место Dictionary class, который был полностью абстрактным class, а не интерфейсом.
Интерфейс Map обеспечивает три представления набора, которые позволяют содержанию карты просматриваться как ряд ключей, набора значений, или набора отображений значения ключа. Порядок карты определяется как порядок, в котором iterators на представлениях набора карты возвращают свои элементы. Некоторые реализации карты, как TreeMap class, делают определенные гарантии относительно их порядка; другие, как HashMap class, не делают.
Отметьте: большая забота должна быть осуществлена, если изменчивые объекты используются в качестве ключей карты. Поведение карты не определяется, если значение объекта изменяется способом, который влияет на сравнения equals, в то время как объект является ключом в карте. Особый случай этого запрета - то, что не допустимо для карты содержать себя как ключ. В то время как допустимо для карты содержать себя как значение, экстремальное предостережение советуется: методы equals И hashCode больше не четко определены на такой карте.
Все классы реализации карты общего назначения должны предоставить двум "стандартным" конструкторам: пустота (никакие параметры) конструктор, который создает пустую карту, и конструктора с единственным параметром типа Map, который создает новую карту с теми же самыми отображениями значения ключа как его параметр. В действительности последний конструктор позволяет пользователю копировать любую карту, производя эквивалентную карту требуемого class. Нет никакого способа осуществить эту рекомендацию (поскольку интерфейсы не могут содержать конструкторов), но все реализации карты общего назначения в JDK подчиняются.
"Разрушительные" методы, содержавшиеся в этом интерфейсе, то есть, методы, которые изменяют карту, на которой они работают, определяются, чтобы бросить UnsupportedOperationException, если эта карта не поддерживает работу. Если это верно, эти методы, но не обязаны, может бросить UnsupportedOperationException, если вызов не имел бы никакого эффекта на карту. Например, вызов putAll(Map)
метод на неподдающейся изменению карте, но не обязан, может выдать исключение, если карта, отображения которой должны быть "наложены", пуста.
У некоторых реализаций карты есть ограничения на ключи и значения, которые они могут содержать. Например, некоторые реализации запрещают нулевые ключи и значения, и у некоторых есть ограничения на типы их ключей. Попытка вставить неподходящий ключ или значение выдает исключение непроверенное, обычно NullPointerException или ClassCastException. Попытка запросить присутствие неподходящего ключа или значения может выдать исключение, или это может просто возвратить false; некоторые реализации покажут прежнее поведение, и некоторые покажут последнего. Более широко попытка работы на неподходящем ключе или значении, завершение которого не привело бы к вставке неподходящего элемента в карту, может выдать исключение, или это может успешно выполниться в опции реализации. Такие исключения отмечаются как "дополнительные" в спецификации для этого интерфейса.
Этот интерфейс является элементом Платформы Наборов Java.
Много методов в интерфейсах Платформы Наборов определяются с точки зрения equals
метод. Например, спецификация для containsKey(Object key)
метод говорит: "возвраты true, если и только если эта карта содержит отображение для ключа k так, что (key==null ? k==null : key.equals(k))." Эта спецификация не должна быть рассмотрена, чтобы подразумевать, что, вызывая Map.containsKey с ненулевым параметром key заставит key.equals(k) быть вызванным для любого ключа k. Реализации свободны реализовать оптимизацию, посредством чего вызова equals избегает, например, первое сравнение хэш-кодов этих двух ключей. ( Object.hashCode()
спецификация гарантирует, что два объекта с неравными хэш-кодами не могут быть равными.) Более широко реализации различных интерфейсов Платформы Наборов свободны использовать в своих интересах указанное поведение базовых Object
методы везде, где конструктор считает это соответствующим.
Модификатор и Тип | Интерфейс и Описание |
---|---|
static interface |
Map.Entry<K,V>
Запись карты (пара ключ/значение).
|
Модификатор и Тип | Метод и Описание |
---|---|
void |
clear()
Удаляет все отображения из этой карты (дополнительная работа).
|
default V |
compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Попытки вычислить отображение для указанного ключа и его тока отображенное значение (или
null если нет никакого текущего отображения). |
default V |
computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
Если указанный ключ уже не связывается со значением (или отображается на
null ), пытается вычислить его значение, используя данную отображающуюся функцию и не вводит это в эту карту если null . |
default V |
computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Если значение для указанного ключа присутствует и является ненулем, попытки вычислить новое отображение, данное ключ и его ток отображенное значение.
|
boolean |
containsKey(Object key)
true возвратов, если эта карта содержит отображение для указанного ключа.
|
boolean |
containsValue(Object value)
true возвратов, если эта карта отображает один или более ключей на указанное значение.
|
Set<Map.Entry<K,V>> |
entrySet()
Возвраты a
Set представление отображений содержится в этой карте. |
boolean |
equals(Object o)
Сравнивает указанный объект с этой картой для равенства.
|
default void |
forEach(BiConsumer<? super K,? super V> action)
Выполняет данное действие на каждой записи в этой карте, в порядке, записи возвращаются набором записи iterator (который может быть неуказанным), пока все записи не были обработаны, или действие бросает
Exception . |
V |
get(Object key)
Возвращает значение, на которое указанный ключ отображается, или
null если эта карта не содержит отображения для ключа. |
default V |
getOrDefault(Object key, V defaultValue)
Возвращает значение, на которое указанный ключ отображается, или
defaultValue если эта карта не содержит отображения для ключа. |
int |
hashCode()
Возвращает значение хэш-кода для этой карты.
|
boolean |
isEmpty()
true возвратов, если эта карта не содержит отображений значения ключа.
|
Set<K> |
keySet()
Возвраты a
Set представление ключей содержится в этой карте. |
default V |
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
Если указанный ключ уже не связывается со значением или связывается с нулем, партнеры он с данным значением.
|
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)
Замены значение каждой записи с результатом вызова заданной функции на той записи, в записях порядка возвращаются набором записи iterator, до всех записей, были обработаны, или функция выдает исключение.
|
int |
size()
Возвращает число отображений значения ключа в этой карте.
|
Collection<V> |
values()
Возвраты a
Collection представление значений содержится в этой карте. |
int size()
boolean isEmpty()
boolean containsKey(Object key)
key
- ключ, присутствие которого в этой карте должно быть протестированоClassCastException
- если ключ имеет несоответствующий тип для этой (дополнительной) картыNullPointerException
- если указанный ключ является нулем, и эта карта не разрешает нулевые (дополнительные) ключиboolean containsValue(Object value)
value
- оцените, чье присутствие в этой карте должно быть протестированоClassCastException
- если значение имеет несоответствующий тип для этой (дополнительной) картыNullPointerException
- если указанное значение является нулем, и эта карта не разрешает (дополнительные) нулевые значенияV get(Object key)
null
если эта карта не содержит отображения для ключа. Более формально, если эта карта содержит отображение от ключа k
к значению v
так, что (key==null ? k==null : key.equals(k))
, тогда этот метод возвраты v
; иначе это возвращается null
. (Может быть самое большее одно такое отображение.)
Если эта карта разрешает нулевые значения, то возвращаемое значение null
не обязательно указывает, что карта не содержит отображения для ключа; также возможно, что карта явно отображает ключ на null
. containsKey
работа может использоваться, чтобы отличить эти два случая.
key
- ключ, присваиваемое значение которого должно быть возвращеноnull
если эта карта не содержит отображения для ключаClassCastException
- если ключ имеет несоответствующий тип для этой (дополнительной) картыNullPointerException
- если указанный ключ является нулем, и эта карта не разрешает нулевые (дополнительные) ключиV put(K key, V value)
m.containsKey(k)
возвратил бы true.)key
- ключ, с которым должно быть связано указанное значениеvalue
- значение, которое будет связано с указанным ключомUnsupportedOperationException
- если работа put не поддерживается этой картойClassCastException
- если class указанного ключа или значения препятствует тому, чтобы это было сохранено в этой картеNullPointerException
- если указанный ключ или значение являются нулем, и эта карта не разрешает нулевые ключи или значенияIllegalArgumentException
- если некоторое свойство указанного ключа или значения препятствует тому, чтобы это было сохранено в этой картеV remove(Object key)
(key==null ? k==null : key.equals(k))
, то отображение удаляется. (Карта может содержать самое большее одно такое отображение.) Возвращает значение который эта карта, ранее связанная ключ, или null если карта, содержавшая никакое отображение для ключа.
Если эта карта разрешает нулевые значения, то возвращаемое значение null не обязательно указывает что карта, содержавшая никакое отображение для ключа; также возможно что карта, явно отображенная ключ на null.
Карта не будет содержать отображение для указанного ключа, как только вызов возвращается.
key
- ключ, отображение которого должно быть удалено из картыUnsupportedOperationException
- если работа remove не поддерживается этой картойClassCastException
- если ключ имеет несоответствующий тип для этой (дополнительной) картыNullPointerException
- если указанный ключ является нулем, и эта карта не разрешает нулевые (дополнительные) ключиvoid putAll(Map<? extends K,? extends V> m)
put(k, v)
на этой карте однажды для каждого отображения от ключа k, чтобы оценить v в указанной карте. Поведение этой работы неопределено, если указанная карта изменяется, в то время как работа происходит.m
- отображения, которые будут сохранены в этой картеUnsupportedOperationException
- если работа putAll не поддерживается этой картойClassCastException
- если class ключа или значения в указанной карте препятствует тому, чтобы это было сохранено в этой картеNullPointerException
- если указанная карта является нулем, или если эта карта не разрешает нулевые ключи или значения, и указанная карта содержит нулевые ключи или значенияIllegalArgumentException
- если некоторое свойство ключа или значения в указанной карте препятствует тому, чтобы это было сохранено в этой картеvoid clear()
UnsupportedOperationException
- если работа clear не поддерживается этой картойSet<K> keySet()
Set
представление ключей содержится в этой карте. Набор поддерживается картой, так изменения к карте отражаются в наборе, и наоборот. Если карта изменяется, в то время как итерация по набору происходит (кроме посредством собственной работы remove iterator), результаты итерации неопределены. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение из карты, через Iterator.remove, Set.remove, removeAll, retainAll, и операции clear. Это не поддерживает операции addAll или add.Collection<V> values()
Collection
представление значений содержится в этой карте. Набор поддерживается картой, так изменения к карте отражаются в наборе, и наоборот. Если карта изменяется, в то время как итерация по набору происходит (кроме посредством собственной работы remove iterator), результаты итерации неопределены. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение из карты, через Iterator.remove, Collection.remove, removeAll, retainAll и операции clear. Это не поддерживает операции addAll или add.Set<Map.Entry<K,V>> entrySet()
Set
представление отображений содержится в этой карте. Набор поддерживается картой, так изменения к карте отражаются в наборе, и наоборот. Если карта изменяется, в то время как итерация по набору происходит (кроме посредством собственной работы remove iterator, или посредством работы setValue на записи карты, возвращенной iterator), результаты итерации неопределены. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение из карты, через Iterator.remove, Set.remove, removeAll, retainAll и операции clear. Это не поддерживает операции addAll или add.boolean equals(Object o)
equals
в class Object
o
- объект, который будет сравнен для равенства с этой картойObject.hashCode()
, HashMap
int hashCode()
Object.hashCode()
.hashCode
в class Object
Map.Entry.hashCode()
, Object.equals(Object)
, equals(Object)
default V getOrDefault(Object key, V defaultValue)
defaultValue
если эта карта не содержит отображения для ключа. Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма.
key
- ключ, присваиваемое значение которого должно быть возвращеноdefaultValue
если эта карта не содержит отображения для ключаClassCastException
- если ключ имеет несоответствующий тип для этой (дополнительной) картыNullPointerException
- если указанный ключ является нулем, и эта карта не разрешает нулевые (дополнительные) ключиdefault void forEach(BiConsumer<? super K,? super V> action)
Exception
. Исключения, выданные действием, передаются к вызывающей стороне. Реализация по умолчанию должна быть переопределена реализациями, если они могут обеспечить более производительную реализацию чем iterator-на-основе.
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма.
map
:
for ((Map.Entry<K, V> entry : map.entrySet())
action.accept(entry.getKey(), entry.getValue());
action
- Действие, которое будет выполнено для каждой записиNullPointerException
- если указанное действие является нулемConcurrentModificationException
- если запись, как находят, удаляется во время итерации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
работа не поддерживается набором записи этой карты iterator.ClassCastException
- если class заменяющего значения препятствует тому, чтобы это было сохранено в этой картеNullPointerException
- если указанная функция является нулем, или указанное заменяющее значение является нулем, и эта карта не разрешает нулевые значенияClassCastException
- если заменяющее значение имеет несоответствующий тип для этой (дополнительной) картыNullPointerException
- если функция или заменяющее значение являются нулем, и эта карта не разрешает нулевые ключи или оценивает (дополнительный)IllegalArgumentException
- если некоторое свойство заменяющего значения препятствует тому, чтобы это было сохранено в этой (дополнительной) картеConcurrentModificationException
- если запись, как находят, удаляется во время итерацииdefault V putIfAbsent(K key, V value)
null
) партнеры это с данным значением и возвратами null
, еще возвращает текущую стоимость. Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма.
map
:
if (map.get(key) == null)
return map.put(key, value);
else
return map.get(key);
key
- ключ, с которым должно быть связано указанное значениеvalue
- значение, которое будет связано с указанным ключом1
если не было никакого отображения для ключа. (A null
возврат может также указать что карта, ранее связанная null
с ключом, если реализация поддерживает нулевые значения.)UnsupportedOperationException
- если put
работа не поддерживается этой (дополнительной) картойClassCastException
- если ключ или значение имеют несоответствующий тип для этой (дополнительной) картыNullPointerException
- если указанный ключ или значение являются нулем, и эта карта не разрешает нулевые ключи или оценивает (дополнительный)IllegalArgumentException
- если некоторое свойство указанного ключа или значения препятствует тому, чтобы это было сохранено в этой (дополнительной) картеConcurrentModificationException
- если модификация карты обнаруживается во время вставки значения.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
- если указанный ключ или значение являются нулем, и эта карта не разрешает нулевые ключи или оценивает (дополнительный)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;
key
- ключ, с которым связывается указанное значениеoldValue
- значение, которое, как ожидают, будет связано с указанным ключомnewValue
- значение, которое будет связано с указанным ключомtrue
если значение было замененоUnsupportedOperationException
- если put
работа не поддерживается этой (дополнительной) картойClassCastException
- если class указанного ключа или значения препятствует тому, чтобы это было сохранено в этой картеNullPointerException
- если указанный ключ или значение являются нулем, и эта карта не разрешает нулевые ключи или значенияIllegalArgumentException
- если некоторое свойство указанного ключа или значения препятствует тому, чтобы это было сохранено в этой картеdefault V replace(K key, V value)
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма.
map
:
if (map.containsKey(key)) {
return map.put(key, value);
} else
return null;
key
- ключ, с которым связывается указанное значениеvalue
- значение, которое будет связано с указанным ключомnull
если не было никакого отображения для ключа. (A null
возврат может также указать что карта, ранее связанная null
с ключом, если реализация поддерживает нулевые значения.)UnsupportedOperationException
- если put
работа не поддерживается этой (дополнительной) картойClassCastException
- если class указанного ключа или значения препятствует тому, чтобы это было сохранено в этой (дополнительной) картеNullPointerException
- если указанный ключ или значение являются нулем, и эта карта не разрешает нулевые ключи или значенияIllegalArgumentException
- если некоторое свойство указанного ключа или значения препятствует тому, чтобы это было сохранено в этой картеdefault V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
null
), пытается вычислить его значение, используя данную отображающуюся функцию и не вводит это в эту карту если null
. Если функция возвращается null
никакое отображение не записывается. Если сама функция выдает исключение (непроверенное), исключение повторно бросается, и никакое отображение не записывается. Наиболее распространенное использование должно создать новый объект, служащий начальной буквой отображенное значение или результат memoized, как в:
map.computeIfAbsent(key, k -> new Value(f(k)));
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма. В частности все реализации подынтерфейса ConcurrentMap
должен задокументировать, применяется ли функция однажды атомарно, только если значение не присутствует. Любой class, который разрешает нулевые значения, должен задокументировать, ли и как этот метод отличает отсутствие в нулевых отображениях.
map
, тогда возвращая текущую стоимость или null
если теперь отсутствующий:
if (map.get(key) == null) {
V newValue = mappingFunction.apply(key);
if (newValue != null)
map.putIfAbsent(key, newValue);
}
key
- ключ, с которым должно быть связано указанное значениеmappingFunction
- функция, чтобы вычислить значениеNullPointerException
- если указанный ключ является нулем, и эта карта не поддерживает нулевые ключи, или mappingFunction является нулемUnsupportedOperationException
- если put
работа не поддерживается этой (дополнительной) картойClassCastException
- если class указанного ключа или значения препятствует тому, чтобы это было сохранено в этой (дополнительной) картеdefault V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Если функция возвращается null
, отображение удаляется. Если сама функция выдает исключение (непроверенное), исключение повторно бросается, и текущее отображение оставляют неизменным.
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма. В частности все реализации подынтерфейса ConcurrentMap
должен задокументировать, применяется ли функция однажды атомарно, только если значение не присутствует. Любой class, который разрешает нулевые значения, должен задокументировать, ли и как этот метод отличает отсутствие в нулевых отображениях.
map
, тогда возвращая текущую стоимость или null
если теперь отсутствующий:
if (map.get(key) != null) {
V oldValue = map.get(key);
V newValue = remappingFunction.apply(key, oldValue);
if (newValue != null)
map.replace(key, oldValue, newValue);
else
map.remove(key, oldValue);
}
В параллельных контекстах реализация по умолчанию может повторить эти шаги, когда многократные потоки делают попытку обновлений.key
- ключ, с которым должно быть связано указанное значениеremappingFunction
- функция, чтобы вычислить значениеNullPointerException
- если указанный ключ является нулем, и эта карта не поддерживает нулевые ключи, или remappingFunction является нулемUnsupportedOperationException
- если put
работа не поддерживается этой (дополнительной) картойClassCastException
- если class указанного ключа или значения препятствует тому, чтобы это было сохранено в этой (дополнительной) картеdefault V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
null
если нет никакого текущего отображения). Например, чтобы или создать или добавить a String msg
к построению карты ценности:
map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
(Метод merge()
часто более просто использовать в таких целях.) Если функция возвращается null
, отображение удаляется (или остается отсутствующим если первоначально отсутствующий). Если сама функция выдает исключение (непроверенное), исключение повторно бросается, и текущее отображение оставляют неизменным.
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма. В частности все реализации подынтерфейса ConcurrentMap
должен задокументировать, применяется ли функция однажды атомарно, только если значение не присутствует. Любой class, который разрешает нулевые значения, должен задокументировать, ли и как этот метод отличает отсутствие в нулевых отображениях.
map
, тогда возвращая текущую стоимость или null
если отсутствующий:
V oldValue = map.get(key);
V newValue = remappingFunction.apply(key, oldValue);
if (oldValue != null ) {
if (newValue != null)
map.replace(key, oldValue, newValue);
else
map.remove(key, oldValue);
} else {
if (newValue != null)
map.putIfAbsent(key, newValue);
else
return null;
}
В параллельных контекстах реализация по умолчанию может повторить эти шаги, когда многократные потоки делают попытку обновлений.key
- ключ, с которым должно быть связано указанное значениеremappingFunction
- функция, чтобы вычислить значениеNullPointerException
- если указанный ключ является нулем, и эта карта не поддерживает нулевые ключи, или remappingFunction является нулемUnsupportedOperationException
- если put
работа не поддерживается этой (дополнительной) картойClassCastException
- если class указанного ключа или значения препятствует тому, чтобы это было сохранено в этой (дополнительной) картеdefault V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
null
. Этот метод может быть полезным, комбинируя многократные отображенные значения для ключа. Например, чтобы или создать или добавить a String msg
к построению карты ценности:
map.merge(key, msg, String::concat)
Если функция возвращается null
, отображение удаляется (или остается отсутствующим если первоначально отсутствующий). Если сама функция выдает исключение (непроверенное), исключение повторно бросается, и текущее отображение оставляют неизменным.
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма. В частности все реализации подынтерфейса ConcurrentMap
должен задокументировать, применяется ли функция однажды атомарно, только если значение не присутствует. Любой class, который разрешает нулевые значения, должен задокументировать, ли и как этот метод отличает отсутствие в нулевых отображениях.
map
, тогда возвращая текущую стоимость или null
если отсутствующий:
V oldValue = map.get(key);
V newValue = (oldValue == null) ? value :
remappingFunction.apply(oldValue, value);
if (newValue == null)
map.remove(key, oldValue);
else if (oldValue == null)
map.putIfAbsent(key, newValue);
else
map.replace(key, oldValue, newValue);
В параллельных контекстах реализация по умолчанию может повторить эти шаги, когда многократные потоки делают попытку обновлений.key
- ключ, с которым должно быть связано указанное значениеvalue
- значение, чтобы использовать если отсутствующийremappingFunction
- функция, чтобы повторно вычислить значение, если существующийUnsupportedOperationException
- если put
работа не поддерживается этой (дополнительной) картойClassCastException
- если class указанного ключа или значения препятствует тому, чтобы это было сохранено в этой (дополнительной) картеNullPointerException
- если указанный ключ является нулем, и эта карта не поддерживает нулевые ключи, или remappingFunction является нулем
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92