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.Interop.IJavaPeerable, 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 , IdentityHashMap
dos 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 semántica de igualdad de referencias.</B>
Un uso típico de esta clase es las transformaciones de gráficos de objetos que conservan la topología, como la serialización o la copia en profundidad. 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 hayan procesado. La tabla de nodos no debe equivaler a objetos distintos aunque sean 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 particular, no garantiza que el pedido permanezca constante con el tiempo.
Esta clase proporciona un rendimiento constante para las operaciones básicas (get
y put
), suponiendo que la función hash de identidad del sistema (System#identityHashCode(Object)
) dispersa 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. La relación precisa entre el tamaño máximo esperado y el número de cubos no se especifica.
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 paga por crear mapas hash de identidad con un tamaño máximo esperado suficientemente grande. Por otro lado, la iteración en las vistas de colecció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 le preocupa especialmente el rendimiento de la 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, excepto a través del propio remove
método del iterador, el iterador iniciará un ConcurrentModificationException
. Por lo tanto, en el caso de la modificación simultánea, el iterador falla rápidamente y limpiamente, en lugar de arriesgarse a un comportamiento arbitrario y no determinista en un momento indeterminado en el futuro.
Tenga en cuenta que el comportamiento rápido de error de un iterador no se puede garantizar tal cual, por lo general, imposible hacer cualquier garantía difícil en presencia de modificaciones simultáneas no asincrónicas. Los iteradores rápidos de error producen ConcurrentModificationException
un 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 con error solo se deben usar para detectar errores.
Esta clase es miembro de Java Collections Framework.
Se agregó en la versión 1.4.
Documentación de Java 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 y se usan según los términos descritos en la creative Commons 2.5.
Constructores
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 nuevo mapa 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 entorno de ejecución. |
Propiedades
Class |
Devuelve la clase en tiempo de ejecución de este |
Handle |
Identificador de la instancia de Android subyacente. (Heredado de Object) |
IsEmpty |
Para agregar (Heredado de AbstractMap) |
JniIdentityHashCode |
Esta clase implementa la |
JniPeerMembers |
Esta clase implementa la |
PeerReference |
Esta clase implementa la |
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
Clear() |
Para agregar (Heredado de AbstractMap) |
Clone() |
Devuelve una copia superficial de esta asignación hash de identidad: las claves y los propios valores no se clonan. |
ContainsKey(Object) |
Para agregar (Heredado de AbstractMap) |
ContainsValue(Object) |
Para agregar (Heredado de AbstractMap) |
Dispose() |
Esta clase implementa la |
Dispose(Boolean) |
Esta clase implementa la |
EntrySet() |
Devuelve una |
Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
ForEach(IBiConsumer) |
Esta clase implementa la |
Get(Object) |
Para agregar (Heredado de AbstractMap) |
GetHashCode() |
Devuelve un valor de código hash del objeto. (Heredado de Object) |
JavaFinalize() |
Llamado por 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() |
Para 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) |
Para agregar (Heredado de AbstractMap) |
PutAll(IDictionary) |
Para agregar (Heredado de AbstractMap) |
Remove(Object) |
Para agregar (Heredado de AbstractMap) |
ReplaceAll(IBiFunction) |
Esta clase implementa la |
SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
Size() |
Para agregar (Heredado de AbstractMap) |
ToArray<T>() |
Esta clase implementa la |
ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
UnregisterFromRuntime() |
Esta clase implementa la |
Values() |
Para agregar (Heredado de AbstractMap) |
Wait() |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser em notificado/em> o <em>interrumpido</em>.<>< (Heredado de Object) |
Wait(Int64) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <notificado<>/em> o <em>interrumpido</em>, o hasta que haya transcurrido una cierta cantidad de tiempo real. (Heredado de Object) |
Wait(Int64, Int32) |
Hace que el subproceso actual espere hasta que se despierte, normalmente por ser <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
IJavaPeerable.Disposed() |
Esta clase implementa la |
IJavaPeerable.DisposeUnlessReferenced() |
Esta clase implementa la |
IJavaPeerable.Finalized() |
Esta clase implementa la |
IJavaPeerable.JniManagedPeerState |
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 |
Métodos de extensió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 |
GetJniTypeName(IJavaPeerable) |
Esta clase implementa la |