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 |
Возвращает класс среды выполнения этого |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| IsEmpty |
Добавление (Унаследовано от AbstractMap) |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
Этот класс реализует |
| JniPeerMembers |
Этот класс реализует |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
| ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
| Имя. | Описание |
|---|---|
| Clear() |
Добавление (Унаследовано от AbstractMap) |
| Clone() |
Возвращает неглубокую копию этой хэш-карты удостоверений: ключи и значения сами не клонируются. |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Этот класс реализует |
| ContainsKey(Object) |
Добавление (Унаследовано от AbstractMap) |
| ContainsValue(Object) |
Добавление (Унаследовано от AbstractMap) |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
Этот класс реализует |
| EntrySet() |
|
| Equals(Object) |
Этот класс реализует |
| 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, Object) |
Этот класс реализует |
| Remove(Object) |
Добавление (Унаследовано от AbstractMap) |
| Replace(Object, Object, Object) |
Добавление |
| ReplaceAll(IBiFunction) |
Этот класс реализует |
| SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Этот класс реализует |
| 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() |
Этот класс реализует |
| IJavaPeerable.Finalized() |
Этот класс реализует |
| IJavaPeerable.JniObjectReferenceControlBlock |
Этот класс реализует |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Этот класс реализует |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Этот класс реализует |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Этот класс реализует |
| IJavaPeerable.UnregisterFromRuntime() |
Этот класс реализует |
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Этот класс реализует |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |