WeakHashMap Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Реализация Map
интерфейса на основе хэш-таблицы с <ненадежными ключами или>em<>.
[Android.Runtime.Register("java/util/WeakHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class WeakHashMap : Java.Util.AbstractMap, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/WeakHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type WeakHashMap = class
inherit AbstractMap
interface IMap
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- Наследование
- Атрибуты
- Реализации
Комментарии
Реализация Map
интерфейса на основе хэш-таблицы с <ненадежными ключами или>em<>. Запись в будет автоматически удалена WeakHashMap
, если ее ключ больше не используется в обычном использовании. Точнее, наличие сопоставления для заданного ключа не помешает отбрасывать ключ сборщиком мусора, т. е. сделать его окончательным, окончательным, а затем восстановленным. При удалении ключа его запись фактически удаляется из карты, поэтому этот класс ведет себя несколько иначе, чем в других Map
реализациях.
Поддерживаются значения NULL и ключ NULL. Этот класс имеет характеристики производительности, аналогичные характеристикам HashMap
класса , и имеет те же параметры эффективности для>исходной <емкости< em/em> и <коэффициента< нагрузки em>/em>.
Как и большинство классов коллекций, этот класс не синхронизируется. Синхронизированный WeakHashMap
объект можно создать с помощью Collections#synchronizedMap 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
объект в хранится косвенно как референт слабой ссылки. Поэтому ключ будет автоматически удален только после того, как сборщик мусора очистит слабые ссылки на него как внутри, так и за ее пределами.
<примечания к реализации strong>:/strong> Объекты значений WeakHashMap
в содержатся обычными строгими< ссылками. Поэтому следует соблюдать осторожность, чтобы объекты значений не ссылались на свои собственные ключи напрямую или косвенно, так как это предотвратит удаление ключей. Обратите внимание, что объект значения может косвенно ссылаться на свой ключ через WeakHashMap
сам, то есть объект значения может строго ссылаться на какой-то другой объект ключа, связанный объект значения, в свою очередь, строго ссылается на ключ первого объекта значения. Если значения на карте не зависят от наличия на карте строгих ссылок на них, одним из способов решения этой проблемы является перенос самих значений в перед WeakReferences
вставкой, как в : m.put(key, new WeakReference(value))
, а затем распакуйте по каждому get
.
Итераторы, возвращаемые методом iterator
коллекций, возвращаемых всеми "методами представления коллекции" этого класса, выполняются быстро: при структурном изменении карты в любое время после создания итератора любым способом, кроме собственного метода итератора remove
, итератор вызовет ConcurrentModificationException
исключение . Таким образом, при одновременном изменении итератор завершает работу быстро и чисто, вместо того, чтобы рисковать произвольным, недетерминированным поведением в неопределенное время в будущем.
Обратите внимание, что быстрое поведение итератора не может быть гарантировано, так как в целом невозможно сделать какие-либо жесткие гарантии при наличии несинхронизированного параллельного изменения. Быстрые итераторы создаются ConcurrentModificationException
на основе наилучших усилий. Поэтому было бы неправильно писать программу, которая зависит от этого исключения из-за его правильности: быстрое поведение итераторов должно использоваться только для обнаружения ошибок.
Этот класс является членом Платформы коллекций Java.
Добавлено в версии 1.2.
Документация по Java для java.util.WeakHashMap
.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.
Конструкторы
WeakHashMap() |
Создает новый пустой |
WeakHashMap(IDictionary) |
Создает новый |
WeakHashMap(Int32) |
Создает новый пустой |
WeakHashMap(Int32, Single) |
Создает новый пустой |
WeakHashMap(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
Class |
Возвращает класс среды выполнения данного объекта |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
IsEmpty |
Добавление (Унаследовано от AbstractMap) |
JniIdentityHashCode |
Реализация |
JniPeerMembers |
Реализация |
PeerReference |
Реализация |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
Clear() |
Добавление (Унаследовано от AbstractMap) |
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
ContainsKey(Object) |
Добавление (Унаследовано от AbstractMap) |
ContainsValue(Object) |
Добавление (Унаследовано от AbstractMap) |
Dispose() |
Реализация |
Dispose(Boolean) |
Реализация |
EntrySet() |
|
Equals(Object) |
Указывает, равен ли какой-то другой объект этому объекту. (Унаследовано от Object) |
ForEach(IBiConsumer) |
Реализация |
Get(Object) |
Добавление (Унаследовано от AbstractMap) |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
JavaFinalize() |
Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект . (Унаследовано от Object) |
KeySet() |
Добавление (Унаследовано от AbstractMap) |
Notify() |
Пробуждение одного потока, ожидающего на мониторе этого объекта. (Унаследовано от Object) |
NotifyAll() |
Активирует все потоки, ожидающие на мониторе этого объекта. (Унаследовано от Object) |
Put(Object, Object) |
Добавление (Унаследовано от AbstractMap) |
PutAll(IDictionary) |
Добавление (Унаследовано от AbstractMap) |
Remove(Object) |
Добавление (Унаследовано от AbstractMap) |
ReplaceAll(IBiFunction) |
Реализация |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
Size() |
Добавление (Унаследовано от AbstractMap) |
ToArray<T>() |
Реализация |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
UnregisterFromRuntime() |
Реализация |
Values() |
Добавление (Унаследовано от AbstractMap) |
Wait() |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>. (Унаследовано от Object) |
Wait(Int64) |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени. (Унаследовано от Object) |
Wait(Int64, Int32) |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
Реализация |
IJavaPeerable.DisposeUnlessReferenced() |
Реализация |
IJavaPeerable.Finalized() |
Реализация |
IJavaPeerable.JniManagedPeerState |
Реализация |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Реализация |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Реализация |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Реализация |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверенное средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Реализация |
GetJniTypeName(IJavaPeerable) |
Реализация |