Язык

IdentityHashMap Класс

Определение

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

[Android.Runtime.Register("java/util/IdentityHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class IdentityHashMap : Java.Util.AbstractMap, IDisposable, Java.IO.ISerializable, Java.Lang.ICloneable
[<Android.Runtime.Register("java/util/IdentityHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type IdentityHashMap = class
    inherit AbstractMap
    interface ISerializable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface ICloneable
    interface IMap
Наследование
Атрибуты
Реализации

Комментарии

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений). Другими словами, в IdentityHashMapдвух ключах k1 и k2 считаются равными, если и только если (k1==k2). (В обычных Map реализациях (например HashMap) два ключа k1 и k2 считаются равными, если и только если (k1==null ? k2==null : k1.equals(k2)).)

<b>Этот класс не является реализацией общего назначения Map ! Хотя этот класс реализует Map интерфейс, он намеренно нарушает Map's общий контракт, который предписывает использовать equals метод при сравнении объектов. Этот класс предназначен для использования только в редких случаях, когда требуется семантика равенства ссылок.</b>

Коллекции представлений этой карты также имеют семантику равенства ссылок для их элементов. Дополнительные сведения см. в keySet() keySetразделе values() values и entrySet() entrySetметодах.

Типичным применением этого класса является преобразование графа объектов, сохраняющих топологию, например сериализацию или глубокое копирование. Для выполнения такого преобразования программа должна поддерживать "таблицу узлов", которая отслеживает все ссылки на объекты, которые уже обработаны. Таблица узлов не должна совпадать с отдельными объектами, даже если они будут равными. Другим типичным использованием этого класса является обслуживание прокси-объектов. Например, объект отладки может потребоваться сохранить прокси-объект для каждого объекта в отлаживаемой программе.

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

Этот класс обеспечивает производительность постоянного времени для основных операций (иget), при условии, что функция хэша системных удостоверений (putSystem#identityHashCode(Object)) распределяет элементы должным образом между контейнерами.

Этот класс имеет один параметр настройки (который влияет на производительность, но не семантику): ожидаемый максимальный размер. Этот параметр является максимальным числом сопоставлений с ключом и значением, которое, как ожидается, будет храниться карта. Внутри этого параметра определяется количество контейнеров, первоначально составляющих хэш-таблицу. Точное отношение между ожидаемым максимальным размером и числом контейнеров не указано.

Если размер карты (количество сопоставлений "ключ-значение") достаточно превышает ожидаемый максимальный размер, число сегментов увеличивается. Увеличение количества сегментов ("перенашивание") может быть довольно дорогостоящим, поэтому он платит за создание хэш-карт с достаточно большим ожидаемым максимальным размером. С другой стороны, итерация по представлениям коллекции требует времени, пропорционального количеству сегментов в хэш-таблице, поэтому он не платит, чтобы не задать ожидаемый максимальный размер слишком высокий, если вы особенно обеспокоены производительностью итерации или использованием памяти.

<Обратите>внимание, что эта реализация не синхронизирована.</strong> , если несколько потоков обращаются к хэш-карте удостоверений одновременно, и по крайней мере один из потоков изменяет карту структурно, она должна быть синхронизирована внешне. (Структурное изменение — это любая операция, которая добавляет или удаляет одно или несколько сопоставлений; простое изменение значения, связанного с ключом, который уже содержит экземпляр, не является структурным изменением.) Обычно это достигается путем синхронизации с некоторым объектом, который естественно инкапсулирует карту.

Если такой объект не существует, карта должна быть "упакована" с помощью Collections#synchronizedMap Collections.synchronizedMap метода. Это лучше всего сделать во время создания, чтобы предотвратить случайный несинхронизированный доступ к карте:

Map m = Collections.synchronizedMap(new IdentityHashMap(...));

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

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

Этот класс является членом Платформы коллекций Java.

Добавлено в версии 1.4.

Java документации по java.util.IdentityHashMap.

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

Конструкторы

Имя. Описание
IdentityHashMap()

Создает новую пустую хэш-карту удостоверений с ожидаемым максимальным размером по умолчанию (21).

IdentityHashMap(IDictionary)

Создает новую хэш-карту удостоверений, содержащую сопоставления "ключ-значение" в указанной карте.

IdentityHashMap(Int32)

Создает новую пустую карту с указанным ожидаемым максимальным размером.

IdentityHashMap(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Свойства

Имя. Описание
Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
IsEmpty

Добавление

(Унаследовано от AbstractMap)
JniIdentityHashCode

Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия.

(Унаследовано от Object)
JniManagedPeerState

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
JniPeerMembers

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

PeerReference

Возвращает ссылку на объект JNI для этого Java однорангового узла.

(Унаследовано от Object)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Имя. Описание
Clear()

Добавление

(Унаследовано от AbstractMap)
Clone()

Возвращает неглубокую копию этой хэш-карты удостоверений: ключи и значения сами не клонируются.

Construct(JniObjectReference, JniObjectReferenceOptions)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
ContainsKey(Object)

Добавление

(Унаследовано от AbstractMap)
ContainsValue(Object)

Добавление

(Унаследовано от AbstractMap)
Dispose()

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
Dispose(Boolean)

Освобождает ресурсы, удерживаемые этим Java одноранговым узлом.

(Унаследовано от Object)
DisposeUnlessReferenced()

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
EntrySet()

Set Возвращает представление сопоставлений, содержащихся на этой карте.

Equals(Object)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
ForEach(IBiConsumer)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

Get(Object)

Добавление

(Унаследовано от AbstractMap)
GetHashCode()

Возвращает хэш-значение кода для объекта.

(Унаследовано от Object)
JavaFinalize()
Устаревшие.

Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет.

(Унаследовано от Object)
KeySet()

Добавление

(Унаследовано от AbstractMap)
Notify()

Просыпается один поток, ожидающий монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
Put(Object, Object)

Добавление

(Унаследовано от AbstractMap)
PutAll(IDictionary)

Добавление

(Унаследовано от AbstractMap)
Remove(Object, Object)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

Remove(Object)

Добавление

(Унаследовано от AbstractMap)
Replace(Object, Object, Object)

Добавление

ReplaceAll(IBiFunction)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
Size()

Добавление

(Унаследовано от AbstractMap)
ToArray<T>()

Создает управляемый массив из этого Java оболочки массива.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия.

(Унаследовано от Object)
Values()

Добавление

(Унаследовано от AbstractMap)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.>

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

Имя. Описание
IJavaPeerable.Disposed()

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
IJavaPeerable.Finalized()

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

(Унаследовано от JavaObject)
IJavaPeerable.UnregisterFromRuntime()

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

Методы расширения

Имя. Описание
GetJniTypeName(IJavaPeerable)

Возвращает имя JNI типа экземпляра self.

JavaAs<TResult>(IJavaPeerable)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Этот класс реализует Map интерфейс с хэш-таблицей с использованием ссылочного равенства вместо равенства объектов при сравнении ключей (и значений).

TryJavaCast<TResult>(IJavaPeerable, TResult)

Попробуйте принуждать к типуself, проверяяTResult, является ли приведение допустимым на стороне Java.

Применяется к