IdentityHashMap Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Esta clase implementa la Map interfaz con una tabla hash, utilizando la igualdad de referencia en lugar de la igualdad de objetos al comparar claves (y valores).
[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
- Herencia
- Atributos
- Implementaciones
Comentarios
Esta clase implementa la Map interfaz con una tabla hash, utilizando la igualdad de referencia en lugar de la igualdad de objetos al comparar claves (y valores). En otras palabras, en , IdentityHashMapdos claves k1 y k2 se consideran iguales si y solo si (k1==k2). (En implementaciones normales Map (como HashMap) dos claves k1 y k2 se consideran iguales si y solo si (k1==null ? k2==null : k1.equals(k2))).
<b>Esta clase no es una implementación de uso Map general. Aunque esta clase implementa la Map interfaz, infringe intencionadamente el Map's contrato general, que exige el uso del equals método al comparar objetos. Esta clase está diseñada para su uso solo en los casos excepcionales en los que se requiere la semántica de igualdad de referencias.</b>
Las colecciones de vistas de este mapa también tienen semántica de igualdad de referencia para sus elementos. Consulte los keySet() keySetmétodos , values() valuesy entrySet() entrySet para obtener más información.
Un uso típico de esta clase es la conservación de la topología de transformaciones de grafos de objetos, como la serialización o la copia profunda. Para realizar esta transformación, un programa debe mantener una "tabla de nodos" que realice un seguimiento de todas las referencias de objeto que ya se han procesado. La tabla de nodos no debe equivaler a objetos distintos incluso si son iguales. Otro uso típico de esta clase es mantener objetos proxy. Por ejemplo, una instalación de depuración podría querer mantener un objeto proxy para cada objeto del programa que se está depurando.
Esta clase proporciona todas las operaciones de asignación opcionales y permite null valores y la null clave. Esta clase no garantiza el orden del mapa; en concreto, no garantiza que el orden permanezca constante con el tiempo.
Esta clase proporciona un rendimiento en tiempo constante para las operaciones básicas (get y put), suponiendo que la función hash de identidad del sistema (System#identityHashCode(Object)) disperse los elementos correctamente entre los cubos.
Esta clase tiene un parámetro de ajuste (que afecta al rendimiento pero no a la semántica): tamaño máximo esperado. Este parámetro es el número máximo de asignaciones de clave-valor que se espera que contenga el mapa. Internamente, este parámetro se usa para determinar el número de cubos que componen inicialmente la tabla hash. No se especifica la relación precisa entre el tamaño máximo esperado y el número de cubos.
Si el tamaño del mapa (el número de asignaciones de clave-valor) supera lo suficiente el tamaño máximo esperado, se aumenta el número de cubos. Aumentar el número de cubos ("rehashing") puede ser bastante costoso, por lo que se paga por crear mapas hash de identidad con un tamaño máximo suficientemente grande esperado. Por otro lado, la iteración sobre las vistas de recopilación requiere tiempo proporcional al número de cubos de la tabla hash, por lo que paga por no establecer el tamaño máximo esperado demasiado alto si está especialmente preocupado por el rendimiento de iteración o el uso de memoria.
<fuerte>Tenga en cuenta que esta implementación no está sincronizada.</strong> Si varios subprocesos acceden simultáneamente a un mapa hash de identidad y al menos uno de los subprocesos modifica el mapa estructuralmente, debe sincronizarse externamente. (Una modificación estructural es cualquier operación que agrega o elimina una o varias asignaciones; simplemente cambia el valor asociado a una clave que una instancia ya contiene no es una modificación estructural). Esto se logra normalmente mediante la sincronización en algún objeto que encapsula naturalmente el mapa.
Si no existe este objeto, el mapa debe "encapsularse" mediante el Collections#synchronizedMap Collections.synchronizedMap método . Esto se hace mejor en el momento de la creación, para evitar el acceso no asincrónico accidental al mapa:
Map m = Collections.synchronizedMap(new IdentityHashMap(...));
Los iteradores devueltos por el iterator método de las colecciones devueltas por todos los "métodos de vista de colección" de esta clase no son rápidos: si el mapa se modifica estructuralmente en cualquier momento después de crear el iterador, de cualquier manera excepto a través del propio remove método del iterador, el iterador producirá un ConcurrentModificationException. Por lo tanto, en el caso de la modificación simultánea, el iterador produce un error rápido y limpio, en lugar de arriesgarse a un comportamiento arbitrario y no determinista en un momento indeterminado en el futuro.
Tenga en cuenta que no se puede garantizar el comportamiento rápido de un iterador, ya que es, por lo general, imposible hacer ninguna garantía dura en presencia de modificaciones simultáneas no asincrónicas. Los iteradores rápidos de error inician ConcurrentModificationException el mejor esfuerzo. Por lo tanto, sería incorrecto escribir un programa que dependiera de esta excepción por su corrección: los iteradores rápidos de error solo se deben usar para detectar errores.
Esta clase es miembro del marco de colecciones de Java.
Agregado en la versión 1.4.
Java documentación para java.util.IdentityHashMap.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.
Constructores
| Nombre | Description |
|---|---|
| IdentityHashMap() |
Construye una nueva asignación hash de identidad vacía con un tamaño máximo esperado predeterminado (21). |
| IdentityHashMap(IDictionary) |
Construye un nuevo mapa hash de identidad que contiene las asignaciones de claves-valor en el mapa especificado. |
| IdentityHashMap(Int32) |
Construye un mapa nuevo y vacío con el tamaño máximo esperado especificado. |
| IdentityHashMap(IntPtr, JniHandleOwnership) |
Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo de ejecución. |
Propiedades
| Nombre | Description |
|---|---|
| Class |
Devuelve la clase en tiempo de ejecución de este |
| Handle |
Identificador de la instancia de Android subyacente. (Heredado de Object) |
| IsEmpty |
Por agregar (Heredado de AbstractMap) |
| JniIdentityHashCode |
Obtiene el código hash de identidad asignado a este Java del mismo nivel por el tiempo de ejecución de interoperabilidad. (Heredado de Object) |
| JniManagedPeerState |
Esta clase implementa la |
| JniPeerMembers |
Esta clase implementa la |
| PeerReference |
Obtiene la referencia de objeto JNI para este Java del mismo nivel. (Heredado de Object) |
| ThresholdClass |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. |
| ThresholdType |
Esta API admite la infraestructura mono para Android y no está pensada para usarse directamente desde el código. |
Métodos
| Nombre | Description |
|---|---|
| Clear() |
Por agregar (Heredado de AbstractMap) |
| Clone() |
Devuelve una copia superficial de este mapa hash de identidad: las claves y los propios valores no se clonan. |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Esta clase implementa la |
| ContainsKey(Object) |
Por agregar (Heredado de AbstractMap) |
| ContainsValue(Object) |
Por agregar (Heredado de AbstractMap) |
| Dispose() |
Libera los recursos mantenidos por este Java del mismo nivel. (Heredado de Object) |
| Dispose(Boolean) |
Libera los recursos mantenidos por este Java del mismo nivel. (Heredado de Object) |
| DisposeUnlessReferenced() |
Esta clase implementa la |
| EntrySet() |
Devuelve una |
| Equals(Object) |
Esta clase implementa la |
| Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
| ForEach(IBiConsumer) |
Esta clase implementa la |
| Get(Object) |
Por agregar (Heredado de AbstractMap) |
| GetHashCode() |
Devuelve un valor de código hash para el objeto . (Heredado de Object) |
| JavaFinalize() |
Lo llama el recolector de elementos no utilizados en un objeto cuando la recolección de elementos no utilizados determina que no hay más referencias al objeto . (Heredado de Object) |
| KeySet() |
Por agregar (Heredado de AbstractMap) |
| Notify() |
Activa un único subproceso que está esperando en el monitor de este objeto. (Heredado de Object) |
| NotifyAll() |
Activa todos los subprocesos que están esperando en el monitor de este objeto. (Heredado de Object) |
| Put(Object, Object) |
Por agregar (Heredado de AbstractMap) |
| PutAll(IDictionary) |
Por agregar (Heredado de AbstractMap) |
| Remove(Object, Object) |
Esta clase implementa la |
| Remove(Object) |
Por agregar (Heredado de AbstractMap) |
| Replace(Object, Object, Object) |
Por agregar |
| ReplaceAll(IBiFunction) |
Esta clase implementa la |
| SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Esta clase implementa la |
| Size() |
Por agregar (Heredado de AbstractMap) |
| ToArray<T>() |
Crea una matriz administrada a partir de este contenedor de matriz Java. (Heredado de Object) |
| ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
| UnregisterFromRuntime() |
Anula el registro de este Java del mismo nivel del tiempo de ejecución de interoperabilidad. (Heredado de Object) |
| Values() |
Por agregar (Heredado de AbstractMap) |
| Wait() |
Hace que el subproceso actual espere hasta que se despierta, normalmente por ser em notificado/em< o >em<interrumpido>/em<.><> (Heredado de Object) |
| Wait(Int64, Int32) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
| Wait(Int64) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <em>notificado</em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Implementaciones de interfaz explícitas
| Nombre | Description |
|---|---|
| IJavaPeerable.Disposed() |
Esta clase implementa la |
| IJavaPeerable.Finalized() |
Esta clase implementa la |
| IJavaPeerable.JniObjectReferenceControlBlock |
Esta clase implementa la |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Esta clase implementa la |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Esta clase implementa la |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Esta clase implementa la |
| IJavaPeerable.UnregisterFromRuntime() |
Esta clase implementa la |
Métodos de extensión
| Nombre | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Obtiene el nombre JNI del tipo de la instancia |
| JavaAs<TResult>(IJavaPeerable) |
Intente coerción |
| JavaCast<TResult>(IJavaObject) |
Realiza una conversión de tipos comprobados en tiempo de ejecución de Android. |
| JavaCast<TResult>(IJavaObject) |
Esta clase implementa la |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Intente coerción |