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, включая get и put). Ожидаемое число записей в карте и ее коэффициенте загрузки должно быть принято во внимание, устанавливая ее начальную емкость, чтобы минимизировать число операций перефразировки. Если начальная емкость будет больше чем максимальное количество записей, разделенных на коэффициент загрузки, то никакие операции перефразировки никогда не будут происходить.
Если много отображений должны быть сохранены в экземпляре HashMap, создавая его с достаточно большой емкостью позволит отображениям быть сохраненными более эффективно чем разрешение ему выполнить автоматическое перефразирование как необходимый вырастить таблицу.
Отметьте, что эта реализация не синхронизируется. Если многократные потоки получают доступ к карте хеша одновременно, и по крайней мере один из потоков изменяет карту структурно, это должно синхронизироваться внешне. (Структурная модификация является любой работой, которая добавляет или удаляет одно или более отображений; просто изменение значения, связанного с ключом, который уже содержит экземпляр, не является структурной модификацией.) Это обычно выполняется, синхронизируясь на некотором объекте, который естественно инкапсулирует карту. Если никакой такой объект не существует, карта должна быть "обернута", используя Collections.synchronizedMap
метод. Это лучше всего делается во время создания, чтобы предотвратить случайный несинхронизируемый доступ к карте:
Map m = Collections.synchronizedMap(new HashMap(...));
iterators, возвращенные всеми "методами представления набора этого класса", являются сбоем быстро: если карта структурно изменяется когда-либо после того, как iterator создается, всегда кроме через собственный метод remove iterator, iterator бросит a ConcurrentModificationException
. Таким образом, перед лицом параллельной модификации, iterator перестал работать быстро и чисто, вместо того, чтобы рискнуть произвольным, недетерминированным поведением в неопределенное время в будущем.
Отметьте, что поведение сбоя быстро iterator не может быть гарантировано, как, вообще говоря, невозможно сделать любые трудные гарантии в присутствии несинхронизируемой параллельной модификации. Перестаньте работать быстро iterators бросают ConcurrentModificationException на основе максимальных усилий. Поэтому, было бы неправильно записать программу, которая зависела от этого исключения для его правильности: поведение сбоя быстро iterators должно использоваться только, чтобы обнаружить ошибки.
Этот класс является элементом Платформы Наборов 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: ключи и сами значения не клонируются.
|
boolean |
containsKey(Object key)
true возвратов, если эта карта содержит отображение для указанного ключа.
|
boolean |
containsValue(Object value)
true возвратов, если эта карта отображает один или более ключей на указанное значение.
|
Set<Map.Entry<K,V>> |
entrySet()
Возвраты a
Set представление отображений содержится в этой карте. |
V |
get(Object key)
Возвращает значение, на которое указанный ключ отображается, или
null если эта карта не содержит отображения для ключа. |
boolean |
isEmpty()
true возвратов, если эта карта не содержит отображений значения ключа.
|
Set<K> |
keySet()
Возвраты a
Set представление ключей содержится в этой карте. |
V |
put(K key, V value)
Связывает указанное значение с указанным ключом в этой карте.
|
void |
putAll(Map<? extends K,? extends V> m)
Копии все отображения от указанной карты до этой карты.
|
V |
remove(Object key)
Удаляет отображение для указанного ключа из этой карты если существующий.
|
int |
size()
Возвращает число отображений значения ключа в этой карте.
|
Collection<V> |
values()
Возвраты a
Collection представление значений содержится в этой карте. |
equals, hashCode, toString
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
в классе AbstractMap<K,V>
key
- ключ, присваиваемое значение которого должно быть возвращеноnull
если эта карта не содержит отображения для ключаput(Object, Object)
public boolean containsKey(Object key)
containsKey
в интерфейсе Map<K,V>
containsKey
в классе AbstractMap<K,V>
key
- Ключ, присутствие которого в этой карте должно быть протестированоpublic V put(K key, V value)
put
в интерфейсе Map<K,V>
put
в классе AbstractMap<K,V>
key
- ключ, с которым должно быть связано указанное значениеvalue
- значение, которое будет связано с указанным ключомpublic void putAll(Map<? extends K,? extends V> m)
putAll
в интерфейсе Map<K,V>
putAll
в классе AbstractMap<K,V>
m
- отображения, которые будут сохранены в этой картеNullPointerException
- если указанная карта является нулемpublic V remove(Object key)
remove
в интерфейсе Map<K,V>
remove
в классе AbstractMap<K,V>
key
- манипулируйте, чье отображение должно быть удалено из картыpublic void clear()
public boolean containsValue(Object value)
containsValue
в интерфейсе Map<K,V>
containsValue
в классе AbstractMap<K,V>
value
- оцените, чье присутствие в этой карте должно быть протестированоpublic Object clone()
clone
в классе 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 и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.