Spec-Zone .ru
спецификации, руководства, описания, API
|
K
- тип ключей сохраняется этой картойV
- тип отображенных значенийpublic class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>
Поддерживаются оба нулевых значения и нулевой ключ. Этот класс имеет показатели производительности, подобные таковым из класса HashMap, и имеет те же самые параметры эффективности начальной емкости и коэффициента загрузки.
Как большинство классов набора, не синхронизируется этот класс. Синхронизируемый WeakHashMap может быть создан, используя Collections.synchronizedMap
метод.
Этот класс предназначается прежде всего для использования с ключевыми объектами, методы equals которых тестируют на объектные идентификационные данные, используя оператор ==. Как только такой ключ отбрасывается, он никогда не может воссоздаваться, таким образом, невозможно сделать поиск того ключа в WeakHashMap в некоторое более позднее время и быть удивленным, что его запись была удалена. Этот класс будет работать отлично с ключевыми объектами, методы equals которых не основаны на объектных идентификационных данных, таковы как экземпляры String. С такими recreatable ключевыми объектами, однако, автоматическое удаление записей WeakHashMap, ключи которых были отброшены, может оказаться, сбивает с толку.
Поведение класса WeakHashMap зависит частично от действий сборщика "мусора", таким образом, несколько знакомые (хотя не требуемый) инварианты Map не содержат для этого класса. Поскольку сборщик "мусора" может отбросить ключи в любое время, WeakHashMap может вести себя, как если бы неизвестный поток тихо удаляет записи. В частности даже если Вы синхронизируетесь на экземпляре WeakHashMap и не вызываете ни один из его мутаторных методов, для метода size возможно возвратить меньшие значения в течение долгого времени, для метода isEmpty, чтобы возвратить false и затем true, для метода containsKey, чтобы возвратить true и более поздний false для данного ключа, для метода get, чтобы возвратить значение для данного ключевого, но более позднего возврата null, для метода put, чтобы возвратить null и метод remove, чтобы возвратить false для ключа, который ранее, казалось, был в карте, и для последовательных исследований набора ключей, набора значения, и набора записи, чтобы привести к последовательно меньшим числам элементов.
Каждый ключевой объект в WeakHashMap сохранен косвенно как референт слабой ссылки. Поэтому ключ будет автоматически удален только после того, как слабые ссылки на него, и внутри и снаружи карты, были очищены сборщиком "мусора".
Примечание реализации: объекты значения в WeakHashMap сохранены обычными сильными ссылками. Таким образом забота должна быть проявлена, чтобы гарантировать, что объекты значения строго не обращаются к их собственным ключам, ни один прямо или косвенно, так как это будет препятствовать тому, чтобы ключи были отброшены. Отметьте, что объект значения может обратиться косвенно к его ключу через WeakHashMap непосредственно; то есть, объект значения может строго обратиться к некоторому другому ключевому объекту, объект присваиваемого значения которого, поочередно, строго обращается к ключу первого объекта значения. Один способ иметь дело с этим состоит в том, чтобы обернуть значения непосредственно в пределах WeakReferences перед вставкой, как в: m.put(key, new WeakReference(value)), и затем разворачивающий на каждый get.
iterators, возвращенные методом iterator наборов, возвращенных всеми "методами представления набора этого класса", являются сбоем быстро: если карта структурно изменяется когда-либо после того, как iterator создается, всегда кроме через собственный метод remove iterator, iterator бросит a ConcurrentModificationException
. Таким образом, перед лицом параллельной модификации, iterator перестал работать быстро и чисто, вместо того, чтобы рискнуть произвольным, недетерминированным поведением в неопределенное время в будущем.
Отметьте, что поведение сбоя быстро iterator не может быть гарантировано, как, вообще говоря, невозможно сделать любые трудные гарантии в присутствии несинхронизируемой параллельной модификации. Перестаньте работать быстро iterators бросают ConcurrentModificationException на основе максимальных усилий. Поэтому, было бы неправильно записать программу, которая зависела от этого исключения для его правильности: поведение сбоя быстро iterators должно использоваться только, чтобы обнаружить ошибки.
Этот класс является элементом Платформы Наборов Java.
HashMap
, WeakReference
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
Конструктор и Описание |
---|
WeakHashMap()
Создает новый, пустой WeakHashMap с начальной емкостью по умолчанию (16) и коэффициент загрузки (0.75).
|
WeakHashMap(int initialCapacity)
Создает новый, пустой WeakHashMap с данной начальной емкостью и коэффициентом загрузки по умолчанию (0.75).
|
WeakHashMap(int initialCapacity, float loadFactor)
Создает новый, пустой WeakHashMap с данной начальной емкостью и данным коэффициентом загрузки.
|
WeakHashMap(Map<? extends K,? extends V> m)
Создает новый WeakHashMap с теми же самыми отображениями как указанная карта.
|
Модификатор и Тип | Метод и Описание |
---|---|
void |
clear()
Удаляет все отображения из этой карты.
|
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 представление значений содержится в этой карте. |
clone, equals, hashCode, toString
public WeakHashMap(int initialCapacity, float loadFactor)
initialCapacity
- Начальная емкость WeakHashMaploadFactor
- Коэффициент загрузки WeakHashMapIllegalArgumentException
- если начальная емкость отрицательна, или если коэффициент загрузки неположителен.public WeakHashMap(int initialCapacity)
initialCapacity
- Начальная емкость WeakHashMapIllegalArgumentException
- если начальная емкость отрицательнаpublic WeakHashMap()
public WeakHashMap(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)
(key==null ? k==null : key.equals(k))
, то отображение удаляется. (Карта может содержать самое большее одно такое отображение.) Возвращает значение который эта карта, ранее связанная ключ, или null если карта, содержавшая никакое отображение для ключа. Возвращаемое значение null не обязательно указывает что карта, содержавшая никакое отображение для ключа; также возможно что карта, явно отображенная ключ на null.
Карта не будет содержать отображение для указанного ключа, как только вызов возвращается.
public void clear()
public boolean containsValue(Object value)
containsValue
в интерфейсе Map<K,V>
containsValue
в классе AbstractMap<K,V>
value
- оцените, чье присутствие в этой карте должно быть протестировано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 и/или его филиалы. Все права защищены.