Spec-Zone.ru › OpenJDK 24

Класс WeakHashMap<K,V>

java.lang.Object
java.util.AbstractMap<K,V>
java.util.WeakHashMap<K,V>
Type Parameters:
K — тип ключей, поддерживаемых этой картой
V — тип сопоставленных значений
Все реализованные интерфейсы:
Map<K,V>
public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>
Реализация интерфейса Map, основанная на хэш-таблице, с слабыми ключами. Элемент в WeakHashMap автоматически удаляется, когда его ключ больше не используется в обычном режиме. Точнее, наличие сопоставления для данного ключа не препятствует его удалению сборщиком мусора, то есть не препятствует его финализации, завершению финализации и последующему возвращению. Когда ключ был удален, его запись фактически удаляется из карты, поэтому этот класс ведет себя несколько иначе, чем другие реализации Map.

Поддерживаются как null-значения, так и null-ключи. Этот класс имеет характеристики производительности, аналогичные классу HashMap, и имеет те же параметры эффективности — начальную емкость и коэффициент заполнения.

Как и большинство коллекций, этот класс не синхронизирован. Синхронизированная WeakHashMap может быть создана с помощью метода Collections.synchronizedMap.

Этот класс предназначен в первую очередь для использования с объектами ключей, чьи методы equals проверяют тождественность объектов с использованием оператора ==. После удаления такого ключа его нельзя воссоздать, поэтому невозможно выполнить поиск этого ключа в WeakHashMap в более позднее время и быть удивленным, что его запись была удалена. Этот класс будет работать прекрасно с объектами ключей, чьи методы equals не основаны на тождественности объектов, таких как экземпляры String. Однако с такими воссоздаваемыми объектами ключей автоматическое удаление записей 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.

Итераторы, возвращаемые методом iterator коллекций, возвращаемых всеми методами «представления коллекций» этого класса, являются быстродействующими: если карта каким-либо образом структурно изменяется после создания итератора, за исключением собственного метода итератора remove, итератор будет выбрасывать исключение ConcurrentModificationException. Таким образом, при одновременном изменении итератор быстро и четко завершает работу, а не рискует произвольным недетерминированным поведением в неопределенное время в будущем.

Обратите внимание, что гарантия быстродействия итератора не может быть гарантирована, поскольку, как правило, невозможно дать какие-либо твердые гарантии при одновременном изменении без синхронизации. Быстродействующие итераторы выбрасывают исключение ConcurrentModificationException на основе наилучших усилий. Поэтому неправильно писать программу, которая полагалась бы на это исключение для своей корректности: быстродействующее поведение итераторов должно использоваться только для обнаружения ошибок.

Этот класс является частью Java Collections Framework.

Since:
1.2
See Also:
  • HashMap
  • WeakReference

Краткое описание вложенных классов

Вложенные классы/интерфейсы, объявленные в классе java.util.AbstractMap

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()
Возвращает представление Set сопоставлений, содержащихся в этой карте.
V get(Object key)
Возвращает значение, которому сопоставлен указанный ключ, или null, если эта карта не содержит сопоставления для ключа.
boolean isEmpty()
Возвращает true, если эта карта не содержит сопоставлений ключ-значение.
Set<K> keySet()
Возвращает представление Set ключей, содержащихся в этой карте.
static <K,V> WeakHashMap<K,V> newWeakHashMap(int numMappings)
Создаёт новую пустую WeakHashMap, подходящую для ожидаемого числа сопоставлений.
V put(K key, V value)
Связывает указанное значение с указанным ключом в этой карте.
void putAll(Map<? extends K, ? extends V> m)
Копирует все отображения из указанной карты в эту карту.
V remove(Object key)
Удаляет сопоставление для ключа из этой слабой хэш-карты, если оно присутствует.
int size()
Возвращает количество сопоставлений ключ-значение в этой карте.
Collection<V> values()
Возвращает представление Collection значений, содержащихся в этой карте.

Методы, объявленные в классе java.util.AbstractMap

clone, equals, hashCode, toString

Методы, объявленные в классе java.lang.Object

finalize, getClass, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе java.util.Map

compute, computeIfAbsent, computeIfPresent, equals, forEach, getOrDefault, hashCode, merge, putIfAbsent, remove, replace, replace, replaceAll

Подробное описание конструкторов

WeakHashMap

public WeakHashMap(int initialCapacity, float loadFactor)
Создаёт новую пустую WeakHashMap с заданной начальной ёмкостью и заданным коэффициентом заполнения.
Примечание API:
Чтобы создать WeakHashMap с начальной ёмкостью, достаточной для ожидаемого числа сопоставлений, используйте newWeakHashMap.
Параметры:
initialCapacity - Начальная ёмкость WeakHashMap
loadFactor - Коэффициент заполнения WeakHashMap
Исключения:
IllegalArgumentException - если начальная ёмкость отрицательная или коэффициент заполнения не положителен.

WeakHashMap

public WeakHashMap(int initialCapacity)
Создаёт новую пустую WeakHashMap с заданной начальной ёмкостью и стандартным коэффициентом заполнения (0.75).
Примечание API:
Чтобы создать WeakHashMap с начальной ёмкостью, достаточной для ожидаемого числа сопоставлений, используйте newWeakHashMap.
Параметры:
initialCapacity - Начальная ёмкость WeakHashMap
Исключения:
IllegalArgumentException - если начальная ёмкость отрицательная

WeakHashMap

public WeakHashMap()
Создаёт новую пустую WeakHashMap со стандартной начальной ёмкостью (16) и коэффициентом заполнения (0.75).

WeakHashMap

public WeakHashMap(Map<? extends K, ? extends V> m)
Создаёт новую WeakHashMap с теми же сопоставлениями, что и в указанной карте. WeakHashMap создаётся со стандартным коэффициентом заполнения (0.75) и начальной ёмкостью, достаточной для хранения сопоставлений в указанной карте.
Параметры:
m - карта, чьи сопоставления должны быть помещены в эту карту
Исключения:
NullPointerException - если указанная карта равна null
С:
1.3

Подробное описание методов

size

public int size()
Возвращает число пар ключ-значение в этой карте. Этот результат является моментом времени и может не отражать необработанные записи, которые будут удалены перед следующей попыткой доступа, потому что они больше не ссылаются.
Определено в:
size в интерфейсе Map<K,V>
Переопределено в:
size в классе AbstractMap<K,V>
Возвращает:
число пар ключ-значение в этой карте

isEmpty

public boolean isEmpty()
Возвращает true, если эта карта не содержит пар ключ-значение. Этот результат является моментом времени и может не отражать необработанные записи, которые будут удалены перед следующей попыткой доступа, потому что они больше не ссылаются.
Определено в:
isEmpty в интерфейсе Map<K,V>
Переопределено в:
isEmpty в классе AbstractMap<K,V>
Возвращает:
true, если эта карта не содержит пар ключ-значение

get

public V get(Object key)
Возвращает значение, которому соответствует указанный ключ, или null, если эта карта не содержит сопоставления для ключа.

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

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

Определено в:
get в интерфейсе Map<K,V>
Переопределено в:
get в классе AbstractMap<K,V>
Параметры:
key - ключ, ассоциированное значение которого требуется вернуть
Возвращает:
значение, которому соответствует указанный ключ, или null, если эта карта не содержит сопоставления для ключа
См. также:
  • put(Object, Object)

containsKey

public boolean containsKey(Object key)
Возвращает true, если эта карта содержит сопоставление для указанного ключа.
Определено в:
containsKey в интерфейсе Map<K,V>
Переопределено в:
containsKey в классе AbstractMap<K,V>
Параметры:
key - Ключ, присутствие которого в этой карте необходимо проверить
Возвращает:
true, если для key есть сопоставление; false в противном случае

put

public V put(K key, V value)
Ассоциирует указанное значение с указанным ключом в этой карте. Если карта ранее содержала сопоставление для этого ключа, старое значение заменяется.
Определено в:
put в интерфейсе Map<K,V>
Переопределено в:
put в классе AbstractMap<K,V>
Параметры:
key - ключ, с которым должно быть ассоциировано указанное значение.
value - значение, которое должно быть ассоциировано с указанным ключом.
Возвращает:
предыдущее значение, связанное с key, или null, если для key не было сопоставления. (Возврат значения null также может указывать, что карта ранее сопоставила null с key.)

putAll

public void putAll(Map<? extends K, ? extends V> m)
Копирует все сопоставления из указанной карты в эту карту. Эти сопоставления заменят любые сопоставления, которые эта карта имела для любых ключей, которые сейчас присутствуют в указанной карте.
Определено в:
putAll в интерфейсе Map<K,V>
Переопределено в:
putAll в классе AbstractMap<K,V>
Параметры:
m - сопоставления, которые должны быть сохранены в этой карте.
Исключения:
NullPointerException - если указанная карта равна null.

remove

public V remove(Object key)
Удаляет сопоставление для ключа из этой слабосвязанной хеш-карты, если оно присутствует. Более формально, если эта карта содержит сопоставление от ключа k к значению v такое, что (key==null ? k==null : key.equals(k)), то это сопоставление удаляется. (Карта может содержать не более одного такого сопоставления.)

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

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

Определено в:
remove в интерфейсе Map<K,V>
Переопределено в:
remove в классе AbstractMap<K,V>
Параметры:
key - ключ, сопоставление которого должно быть удалено из карты
Возвращает:
предыдущее значение, связанное с key, или null, если для key не было сопоставления

clear

public void clear()
Удаляет все сопоставления из этой карты. Карта будет пустой после возвращения этого вызова.
Определено в:
clear в интерфейсе Map<K,V>
Переопределено в:
clear в классе AbstractMap<K,V>

containsValue

public boolean containsValue(Object value)
Возвращает true, если эта карта сопоставляет один или несколько ключей со значением указанного значения.
Определено в:
containsValue в интерфейсе Map<K,V>
Переопределено в:
containsValue в классе AbstractMap<K,V>
Параметры:
value - значение, присутствие которого в этой карте необходимо проверить
Возвращает:
true, если эта карта сопоставляет один или несколько ключей со значением указанного значения

keySet

public Set<K> keySet()
Возвращает представление Set ключей, содержащихся в этом map. Множество поддерживается map, поэтому изменения в map отражаются в множестве и наоборот. Если map изменяется во время итерации по множеству (кроме операций самого итератора remove), результаты итерации не определены. Множество поддерживает удаление элементов, что удаляет соответствующее отображение из map, через операции Iterator.remove, Set.remove, removeAll, retainAll и clear. Оно не поддерживает операции add или addAll.
Указано:
keySet в интерфейсе Map<K,V>
Переопределяет:
keySet в классе AbstractMap<K,V>
Возвращает:
представление множества ключей, содержащихся в этом map

values

public Collection<V> values()
Возвращает представление Collection значений, содержащихся в этом map. Коллекция поддерживается map, поэтому изменения в map отражаются в коллекции и наоборот. Если map изменяется во время итерации по коллекции (кроме операций самого итератора remove), результаты итерации не определены. Коллекция поддерживает удаление элементов, что удаляет соответствующее отображение из map, через операции Iterator.remove, Collection.remove, removeAll, retainAll и clear. Она не поддерживает операции add или addAll.
Указано:
values в интерфейсе Map<K,V>
Переопределяет:
values в классе AbstractMap<K,V>
Возвращает:
представление коллекции значений, содержащихся в этом map

entrySet

public Set<Map.Entry<K,V>> entrySet()
Возвращает представление Set отображений, содержащихся в этом map. Множество поддерживается map, поэтому изменения в map отражаются в множестве и наоборот. Если map изменяется во время итерации по множеству (кроме операций самого итератора remove или операции setValue на элементе map, возвращенном итератором), результаты итерации не определены. Множество поддерживает удаление элементов, что удаляет соответствующее отображение из map, через операции Iterator.remove, Set.remove, removeAll, retainAll и clear. Оно не поддерживает операции add или addAll.
Указано:
entrySet в интерфейсе Map<K,V>
Возвращает:
представление множества отображений, содержащихся в этом map

newWeakHashMap

public static <K,V> WeakHashMap<K,V> newWeakHashMap(int numMappings)
Создает новый, пустой WeakHashMap, подходящий для ожидаемого количества отображений. Возвращаемый map использует значение по умолчанию для коэффициента загрузки 0.75, и его начальная емкость обычно достаточно велика для добавления ожидаемого количества отображений без изменения размера map.
Параметры типа:
K - тип ключей, поддерживаемых новым map
V - тип сопоставленных значений
Параметры:
numMappings - ожидаемое количество отображений
Возвращает:
недавно созданный map
Исключения:
IllegalArgumentException - если numMappings отрицательно
С тех пор:
19

© 1993, 2025, 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/WeakHashMap.html

Spec-Zone.ru

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