Spec-Zone .ru
спецификации, руководства, описания, API
|
K
- тип ключей сохраняется этой картойV
- тип отображенных значенийpublic class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
Эта реализация обеспечивает постоянно-разовую производительность для основных операций (get и put), предполагая, что хеш-функция рассеивает элементы должным образом среди блоков. Итерация по представлениям набора требует времени, пропорционального "емкости" экземпляра HashMap (число блоков) плюс его размер (число отображений значения ключа). Таким образом очень важно не установить начальную емкость слишком высоко (или коэффициент загрузки слишком низко), если итеративная производительность важна.
У экземпляра HashMap есть два параметра, которые влияют на его производительность: начальная емкость и коэффициент загрузки. Емкость является числом блоков в хэш-таблице, и начальная емкость является просто емкостью в то время, когда хэш-таблица создается. Коэффициент загрузки является мерой того, как полный хэш-таблице позволяют добраться прежде, чем ее емкость будет автоматически увеличена. Когда число записей в хэш-таблице превышает продукт коэффициента загрузки и текущей емкости, хэш-таблица перефразируется (то есть, внутренние структуры данных восстанавливаются) так, чтобы у хэш-таблицы было приблизительно дважды число блоков.
Как правило, коэффициент загрузки значения по умолчанию (.75) предложения хороший компромисс между затратами времени и пространства. Более высокие значения уменьшают издержки пространства, но увеличивают стоимость поиска (отраженный в большинстве операций HashMap class, включая get и put). Ожидаемое число записей в карте и ее коэффициенте загрузки должно быть принято во внимание, устанавливая ее начальную емкость, чтобы минимизировать число операций перефразировки. Если начальная емкость будет больше чем максимальное количество записей, разделенных на коэффициент загрузки, то никакие операции перефразировки никогда не будут происходить.
Если много отображений должны быть сохранены в экземпляре HashMap, создавая его с достаточно большой емкостью позволит отображениям быть сохраненными более эффективно чем разрешение ему выполнить автоматическое перефразирование как необходимый вырастить таблицу.
Отметьте, что эта реализация не синхронизируется. Если многократные потоки получают доступ к карте хеша одновременно, и по крайней мере один из потоков изменяет карту структурно, это должно синхронизироваться внешне. (Структурная модификация является любой работой, которая добавляет или удаляет одно или более отображений; просто изменение значения, связанного с ключом, который уже содержит экземпляр, не является структурной модификацией.) Это обычно выполняется, синхронизируясь на некотором объекте, который естественно инкапсулирует карту. Если никакой такой объект не существует, карта должна быть "обернута", используя Collections.synchronizedMap
метод. Это лучше всего делается во время создания, чтобы предотвратить случайный несинхронизируемый доступ к карте:
Map m = Collections.synchronizedMap(new HashMap(...));
iterators, возвращенные всеми "методами представления набора этого class", являются сбоем быстро: если карта структурно изменяется когда-либо после того, как iterator создается, всегда кроме через собственный метод remove iterator, iterator бросит a ConcurrentModificationException
. Таким образом, перед лицом параллельной модификации, iterator перестал работать быстро и чисто, вместо того, чтобы рискнуть произвольным, недетерминированным поведением в неопределенное время в будущем.
Отметьте, что поведение сбоя быстро iterator не может быть гарантировано, как, вообще говоря, невозможно сделать любые трудные гарантии в присутствии несинхронизируемой параллельной модификации. Перестаньте работать быстро iterators бросают ConcurrentModificationException на основе максимальных усилий. Поэтому, было бы неправильно записать программу, которая зависела от этого исключения для его правильности: поведение сбоя быстро iterators должно использоваться только, чтобы обнаружить ошибки.
Этот class является элементом Платформы Наборов Java.
Object.hashCode()
, Collection
, Map
, TreeMap
, Hashtable
, Сериализированная ФормаAbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
Конструктор и Описание |
---|
HashMap()
Создает пустой HashMap с емкостью начальной буквы значения по умолчанию (16) и коэффициент загрузки значения по умолчанию (0.75).
|
HashMap(int initialCapacity)
Создает пустой HashMap с указанной начальной емкостью и коэффициентом загрузки значения по умолчанию (0.75).
|
HashMap(int initialCapacity, float loadFactor)
Создает пустой HashMap с указанной начальной емкостью и коэффициентом загрузки.
|
HashMap(Map<? extends K,? extends V> m)
Создает новый HashMap с теми же самыми отображениями как указанный Map.
|
Модификатор и Тип | Метод и Описание |
---|---|
void |
clear()
Удаляет все отображения из этой карты.
|
Объект |
clone()
Возвращает мелкую копию этого экземпляра HashMap: ключи и сами значения не клонируются.
|
V |
compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Попытки вычислить отображение для указанного ключа и его тока отображенное значение (или
null если нет никакого текущего отображения). |
V |
computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
Если указанный ключ уже не связывается со значением (или отображается на
null ), пытается вычислить его значение, используя данную отображающуюся функцию и не вводит это в эту карту если null . |
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 представление отображений содержится в этой карте. |
V |
get(Object key)
Возвращает значение, на которое указанный ключ отображается, или
null если эта карта не содержит отображения для ключа. |
V |
getOrDefault(Object key, V defaultValue)
Возвращает значение, на которое указанный ключ отображается, или
defaultValue если эта карта не содержит отображения для ключа. |
boolean |
isEmpty()
true возвратов, если эта карта не содержит отображений значения ключа.
|
Set<K> |
keySet()
Возвраты a
Set представление ключей содержится в этой карте. |
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)
Копии все отображения от указанной карты до этой карты.
|
V |
putIfAbsent(K key, V value)
Если указанный ключ уже не связывается со значением (или отображается на
null ) партнеры это с данным значением и возвратами null , еще возвращает текущую стоимость. |
V |
remove(Object key)
Удаляет отображение для указанного ключа из этой карты если существующий.
|
boolean |
remove(Object key, Object value)
Удаляет запись для указанного ключа, только если это в настоящий момент отображается на указанное значение.
|
V |
replace(K key, V value)
Заменяет запись для указанного ключа, только если это в настоящий момент отображается на некоторое значение.
|
boolean |
replace(K key, V oldValue, V newValue)
Заменяет запись для указанного ключа только если в настоящий момент отображенный на указанное значение.
|
int |
size()
Возвращает число отображений значения ключа в этой карте.
|
Collection<V> |
values()
Возвраты a
Collection представление значений содержится в этой карте. |
equals, hashCode, toString
finalize, getClass, notify, notifyAll, wait, wait, wait
equals, forEach, hashCode, replaceAll
public HashMap(int initialCapacity, float loadFactor)
initialCapacity
- начальная емкостьloadFactor
- коэффициент загрузкиIllegalArgumentException
- если начальная емкость отрицательна, или коэффициент загрузки неположителенpublic HashMap(int initialCapacity)
initialCapacity
- начальная емкость.IllegalArgumentException
- если начальная емкость отрицательна.public HashMap()
public HashMap(Map<? extends K,? extends V> m)
m
- карта, отображения которой должны быть помещены в эту картуNullPointerException
- если указанная карта является нулемpublic int size()
public boolean isEmpty()
public V get(Object key)
null
если эта карта не содержит отображения для ключа. Более формально, если эта карта содержит отображение от ключа k
к значению v
так, что (key==null ? k==null : key.equals(k))
, тогда этот метод возвраты v
; иначе это возвращается null
. (Может быть самое большее одно такое отображение.)
Возвращаемое значение null
не обязательно указывает, что карта не содержит отображения для ключа; также возможно, что карта явно отображает ключ на null
. containsKey
работа может использоваться, чтобы отличить эти два случая.
get
в интерфейсе Map<K,V>
get
в class AbstractMap<K,V>
key
- ключ, присваиваемое значение которого должно быть возвращеноnull
если эта карта не содержит отображения для ключаput(Object, Object)
public V getOrDefault(Object key, V defaultValue)
Map
defaultValue
если эта карта не содержит отображения для ключа. Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма.
getOrDefault
в интерфейсе Map<K,V>
key
- ключ, присваиваемое значение которого должно быть возвращеноdefaultValue
если эта карта не содержит отображения для ключаpublic boolean containsKey(Object key)
containsKey
в интерфейсе Map<K,V>
containsKey
в class AbstractMap<K,V>
key
- Ключ, присутствие которого в этой карте должно быть протестированоpublic V put(K key, V value)
put
в интерфейсе Map<K,V>
put
в class AbstractMap<K,V>
key
- ключ, с которым должно быть связано указанное значениеvalue
- значение, которое будет связано с указанным ключомpublic void putAll(Map<? extends K,? extends V> m)
putAll
в интерфейсе Map<K,V>
putAll
в class AbstractMap<K,V>
m
- отображения, которые будут сохранены в этой картеNullPointerException
- если указанная карта является нулемpublic V remove(Object key)
remove
в интерфейсе Map<K,V>
remove
в class AbstractMap<K,V>
key
- ключ, отображение которого должно быть удалено из картыpublic V putIfAbsent(K key, V value)
Map
null
) партнеры это с данным значением и возвратами null
, еще возвращает текущую стоимость. Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма.
putIfAbsent
в интерфейсе Map<K,V>
key
- ключ, с которым должно быть связано указанное значениеvalue
- значение, которое будет связано с указанным ключом1
если не было никакого отображения для ключа. (A null
возврат может также указать что карта, ранее связанная null
с ключом, если реализация поддерживает нулевые значения.)public boolean remove(Object key, Object value)
Map
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма.
public boolean replace(K key, V oldValue, V newValue)
Map
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма.
public V replace(K key, V value)
Map
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма.
replace
в интерфейсе Map<K,V>
key
- ключ, с которым связывается указанное значениеvalue
- значение, которое будет связано с указанным ключомnull
если не было никакого отображения для ключа. (A null
возврат может также указать что карта, ранее связанная null
с ключом, если реализация поддерживает нулевые значения.)public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
Map
null
), пытается вычислить его значение, используя данную отображающуюся функцию и не вводит это в эту карту если null
. Если функция возвращается null
никакое отображение не записывается. Если сама функция выдает исключение (непроверенное), исключение повторно бросается, и никакое отображение не записывается. Наиболее распространенное использование должно создать новый объект, служащий начальной буквой отображенное значение или результат memoized, как в:
map.computeIfAbsent(key, k -> new Value(f(k)));
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма. В частности все реализации подынтерфейса ConcurrentMap
должен задокументировать, применяется ли функция однажды атомарно, только если значение не присутствует. Любой class, который разрешает нулевые значения, должен задокументировать, ли и как этот метод отличает отсутствие в нулевых отображениях.
computeIfAbsent
в интерфейсе Map<K,V>
key
- ключ, с которым должно быть связано указанное значениеmappingFunction
- функция, чтобы вычислить значениеpublic V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Map
Если функция возвращается null
, отображение удаляется. Если сама функция выдает исключение (непроверенное), исключение повторно бросается, и текущее отображение оставляют неизменным.
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма. В частности все реализации подынтерфейса ConcurrentMap
должен задокументировать, применяется ли функция однажды атомарно, только если значение не присутствует. Любой class, который разрешает нулевые значения, должен задокументировать, ли и как этот метод отличает отсутствие в нулевых отображениях.
computeIfPresent
в интерфейсе Map<K,V>
key
- ключ, с которым должно быть связано указанное значениеremappingFunction
- функция, чтобы вычислить значениеpublic V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
Map
null
если нет никакого текущего отображения). Например, чтобы или создать или добавить a String msg
к построению карты ценности:
map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
(Метод merge()
часто более просто использовать в таких целях.) Если функция возвращается null
, отображение удаляется (или остается отсутствующим если первоначально отсутствующий). Если сама функция выдает исключение (непроверенное), исключение повторно бросается, и текущее отображение оставляют неизменным.
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма. В частности все реализации подынтерфейса ConcurrentMap
должен задокументировать, применяется ли функция однажды атомарно, только если значение не присутствует. Любой class, который разрешает нулевые значения, должен задокументировать, ли и как этот метод отличает отсутствие в нулевых отображениях.
public V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
Map
null
. Этот метод может быть полезным, комбинируя многократные отображенные значения для ключа. Например, чтобы или создать или добавить a String msg
к построению карты ценности:
map.merge(key, msg, String::concat)
Если функция возвращается null
, отображение удаляется (или остается отсутствующим если первоначально отсутствующий). Если сама функция выдает исключение (непроверенное), исключение повторно бросается, и текущее отображение оставляют неизменным.
Реализация по умолчанию не делает гарантий о синхронизации или свойствах атомарности этого метода. Любая реализация, обеспечивающая гарантии атомарности, должна переопределить этот метод и задокументировать его свойства параллелизма. В частности все реализации подынтерфейса ConcurrentMap
должен задокументировать, применяется ли функция однажды атомарно, только если значение не присутствует. Любой class, который разрешает нулевые значения, должен задокументировать, ли и как этот метод отличает отсутствие в нулевых отображениях.
merge
в интерфейсе Map<K,V>
key
- ключ, с которым должно быть связано указанное значениеvalue
- значение, чтобы использовать если отсутствующийremappingFunction
- функция, чтобы повторно вычислить значение, если существующийpublic void clear()
public boolean containsValue(Object value)
containsValue
в интерфейсе Map<K,V>
containsValue
в class AbstractMap<K,V>
value
- оцените, чье присутствие в этой карте должно быть протестированоpublic Object clone()
clone
в class AbstractMap<K,V>
Cloneable
public Set<K> keySet()
Set
представление ключей содержится в этой карте. Набор поддерживается картой, так изменения к карте отражаются в наборе, и наоборот. Если карта изменяется, в то время как итерация по набору происходит (кроме посредством собственной работы remove iterator), результаты итерации неопределены. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение из карты, через Iterator.remove, Set.remove, removeAll, retainAll, и операции clear. Это не поддерживает операции addAll или add.public Collection<V> values()
Collection
представление значений содержится в этой карте. Набор поддерживается картой, так изменения к карте отражаются в наборе, и наоборот. Если карта изменяется, в то время как итерация по набору происходит (кроме посредством собственной работы remove iterator), результаты итерации неопределены. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение из карты, через Iterator.remove, Collection.remove, removeAll, retainAll и операции clear. Это не поддерживает операции addAll или add.public Set<Map.Entry<K,V>> entrySet()
Set
представление отображений содержится в этой карте. Набор поддерживается картой, так изменения к карте отражаются в наборе, и наоборот. Если карта изменяется, в то время как итерация по набору происходит (кроме посредством собственной работы remove iterator, или посредством работы setValue на записи карты, возвращенной iterator), результаты итерации неопределены. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение из карты, через Iterator.remove, Set.remove, removeAll, retainAll и операции clear. Это не поддерживает операции addAll или add.
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92