LinkedHashMap 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í.
Tabla hash y implementación de lista vinculada de la Map interfaz, con orden de encuentro bien definido.
[Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class LinkedHashMap : Java.Util.HashMap, IDisposable, Java.Util.ISequencedMap
[<Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type LinkedHashMap = class
inherit HashMap
interface IMap
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ISequencedMap
- Herencia
- Atributos
- Implementaciones
Comentarios
Tabla hash y implementación de lista vinculada de la Map interfaz, con orden de encuentro bien definido. Esta implementación difiere de HashMap en que mantiene una lista doblemente vinculada que se ejecuta a través de todas sus entradas. Esta lista vinculada define el orden de encuentro (el orden de iteración), que normalmente es el orden en el que se insertaron las claves en el mapa (orden de inserción). La entrada insertada menos recientemente (la más reciente) es la primera, y la entrada más joven es la última. Tenga en cuenta que el orden de encuentro no se ve afectado si se vuelve a insertar una clave en el mapa con el put método . (Se reinserte una clave k en un mapa m si m.put(k, v) se invoca cuando m.containsKey(k) se devuelve true inmediatamente antes de la invocación). La vista ordenada inverso de este mapa está en orden opuesto, con la entrada más joven que aparece primero y la entrada más reciente aparece en último lugar. El orden de encuentro de las entradas que ya están en el mapa se puede cambiar mediante los #putFirst putFirst métodos y #putLast putLast .
Esta implementación ahorra a sus clientes del orden no especificado, generalmente caótico proporcionado por HashMap (y Hashtable), sin incurrir en el aumento del costo asociado a TreeMap. Se puede usar para generar una copia de un mapa que tenga el mismo orden que el original, independientemente de la implementación del mapa original:
{@code
void foo(Map<String, Integer> m) {
Map<String, Integer> copy = new LinkedHashMap<>(m);
...
}
}
Esta técnica es especialmente útil si un módulo toma un mapa en la entrada, lo copia y después devuelve resultados cuyo orden viene determinado por el de la copia. (Los clientes generalmente aprecian tener cosas devueltas en el mismo orden en que se presentaron).
Se proporciona un especial #LinkedHashMap(int,float,boolean) constructor para crear un mapa hash vinculado cuyo orden de encuentro es el orden en el que se accedió por última vez a sus entradas, desde el acceso menos reciente a más reciente (orden de acceso). Este tipo de mapa es adecuado para compilar cachés LRU. La invocación de los putmétodos , putIfAbsent, getgetOrDefaultcomputecomputeIfAbsent, computeIfPresento merge da como resultado un acceso a la entrada correspondiente (suponiendo que existe una vez completada la invocación). Los replace métodos solo dan como resultado un acceso a la entrada si se reemplaza el valor. El putAll método genera un acceso de entrada para cada asignación del mapa especificado, en el orden en que el iterador del conjunto de entrada del mapa especificado proporciona las asignaciones de clave-valor. Ningún otro método genera accesos de entrada. Invocar estos métodos en la vista invertida genera accesos a entradas en el mapa de respaldo. Tenga en cuenta que, en la vista invertida, un acceso a una entrada lo mueve primero en orden de encuentro. Métodos de posicionamiento explícitos como putFirst o lastEntry, ya sea en el mapa o en su vista ordenada inversa, realice la operación de posicionamiento y no genere accesos de entrada. Las operaciones en las keySetvistas , valuesy entrySet o en sus homólogos secuenciados no afectan al orden de encuentro del mapa de respaldo.
El #removeEldestEntry(Map.Entry) método se puede invalidar para imponer una directiva para quitar las asignaciones obsoletas automáticamente cuando se agregan nuevas asignaciones al mapa. Como alternativa, dado que la entrada "eldest" es la primera entrada en orden de encuentro, los programas pueden inspeccionar y quitar asignaciones obsoletas mediante el uso de los #firstEntry firstEntry métodos y #pollFirstEntry pollFirstEntry .
Esta clase proporciona todas las operaciones y Map opcionalesSequencedMap, y permite elementos NULL. Al igual HashMapque , proporciona un rendimiento en tiempo constante para las operaciones básicas (addy containsremove), suponiendo que la función hash disperse los elementos correctamente entre los cubos. Es probable que el rendimiento sea ligeramente inferior al de HashMap, debido al gasto agregado de mantener la lista vinculada, con una excepción: Iteración sobre las vistas de colección de un LinkedHashMap requiere tiempo proporcional al tamaño del mapa, independientemente de su capacidad. Es probable que la iteración sobre una HashMap sea más costosa, lo que requiere tiempo proporcional a su capacidad.
Un mapa hash vinculado tiene dos parámetros que afectan a su rendimiento: capacidad inicial y factor de carga. Se definen exactamente como para HashMap. Sin embargo, tenga en cuenta que la penalización por elegir un valor excesivamente alto para la capacidad inicial es menos grave para esta clase que para HashMap, ya que los tiempos de iteración de esta clase no se ven afectados por la capacidad.
<fuerte>Tenga en cuenta que esta implementación no está sincronizada.</strong> Si varios subprocesos acceden simultáneamente a un mapa hash vinculado y al menos uno de los subprocesos modifica el mapa estructuralmente, debe<>< sincronizarse> externamente. 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 LinkedHashMap(...));
Una modificación estructural es cualquier operación que agrega o elimina una o varias asignaciones o, en el caso de mapas hash vinculados ordenados por acceso, afecta al orden de iteración. En los mapas hash vinculados ordenados por inserción, simplemente cambiar el valor asociado a una clave que ya está contenida en el mapa no es una modificación estructural.
<strong>En los mapas hash vinculados ordenados por el acceso, simplemente consultar el mapa con get es una modificación estructural.
</strong>)
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 son <em fail-fast></em>: si el mapa se modifica estructuralmente en cualquier momento después de crear el iterador, de cualquier manera excepto a través del método propio remove 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: el comportamiento rápido del error de los iteradores solo se debe usar para detectar errores.
Los divisores devueltos por el método spliterator de las colecciones devueltas por todos los métodos de vista de colección de esta clase son <em>late-binding</em>, <em>fail-fast</em>, y además notifica Spliterator#ORDERED.
<em>Note</em>: La implementación de estos divisores en Android Nougat (niveles de API 24 y 25) usa el orden incorrecto (incoherente con los iteradores, que usan el orden correcto), a pesar de notificar Spliterator#ORDERED. Puede usar los siguientes fragmentos de código para obtener un spliterador ordenado correctamente en el nivel de API 24 y 25: <ul><li>Para una vista c = lhm.keySet()colección , c = lhm.entrySet() o c = lhm.values(), use java.util.Spliterators.spliterator(c, c.spliterator().characteristics()) en lugar de c.spliterator().
<li>En lugar de c.stream() o c.parallelStream(), use java.util.stream.StreamSupport.stream(spliterator, false) para construir un (noparallel) java.util.stream.Stream a partir de este tipo Spliteratorde .
</ul> Tenga en cuenta que estas soluciones alternativas solo se sugieren donde lhm es .LinkedHashMap
Esta clase es miembro del marco de colecciones de Java.
Agregado en la versión 1.4.
Java documentación para java.util.LinkedHashMap.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el Android y se usan según los términos descritos en creative Creative Commons 2.5 Attribution License.
Constructores
| Nombre | Description |
|---|---|
| LinkedHashMap() |
Construye una instancia vacía ordenada por |
| LinkedHashMap(IDictionary) |
Construye una instancia ordenada |
| LinkedHashMap(Int32, Single, Boolean) |
Construye una instancia vacía |
| LinkedHashMap(Int32, Single) |
Construye una instancia vacía ordenada |
| LinkedHashMap(Int32) |
Construye una instancia vacía ordenada por |
| LinkedHashMap(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 |
Tabla hash y implementación de lista vinculada de la |
| JniPeerMembers |
Tabla hash y implementación de lista vinculada de 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 esta |
| Compute(Object, IBiFunction) |
Tabla hash y implementación de lista vinculada de la |
| ComputeIfAbsent(Object, IFunction) |
Tabla hash y implementación de lista vinculada de la |
| ComputeIfPresent(Object, IBiFunction) |
Tabla hash y implementación de lista vinculada de la |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Tabla hash y implementación de lista vinculada de 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() |
Tabla hash y implementación de lista vinculada de la |
| EntrySet() |
Devuelve una |
| Equals(Object) |
Tabla hash y implementación de lista vinculada de la |
| Equals(Object) |
Indica si algún otro objeto es "igual a" este. (Heredado de Object) |
| ForEach(IBiConsumer) |
Tabla hash y implementación de lista vinculada de la |
| Get(Object) |
Por agregar (Heredado de AbstractMap) |
| GetHashCode() |
Devuelve un valor de código hash del objeto. (Heredado de Object) |
| GetOrDefault(Object, Object) |
Tabla hash y implementación de lista vinculada de la |
| 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) |
| Merge(Object, Object, IBiFunction) |
Tabla hash y implementación de lista vinculada de la |
| NewLinkedHashMap(Int32) |
Tabla hash y implementación de lista vinculada de la |
| 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) |
| PutFirst(Object, Object) |
Por agregar |
| PutIfAbsent(Object, Object) |
Tabla hash y implementación de lista vinculada de la |
| PutLast(Object, Object) |
Por agregar |
| Remove(Object, Object) |
Quita la asignación de la clave especificada de este mapa si está presente. (Heredado de HashMap) |
| Remove(Object) |
Por agregar (Heredado de AbstractMap) |
| RemoveEldestEntry(IMapEntry) |
Devuelve |
| Replace(Object, Object, Object) |
Tabla hash y implementación de lista vinculada de la |
| Replace(Object, Object) |
Tabla hash y implementación de lista vinculada de la |
| ReplaceAll(IBiFunction) |
Tabla hash y implementación de lista vinculada de la |
| Reversed() |
Tabla hash y implementación de lista vinculada de la |
| SequencedEntrySet() |
Tabla hash y implementación de lista vinculada de la |
| SequencedKeySet() |
Tabla hash y implementación de lista vinculada de la |
| SequencedValues() |
Tabla hash y implementación de lista vinculada de la |
| SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Tabla hash y implementación de lista vinculada de 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() |
Tabla hash y implementación de lista vinculada de la |
| IJavaPeerable.Finalized() |
Tabla hash y implementación de lista vinculada de la |
| IJavaPeerable.JniObjectReferenceControlBlock |
Tabla hash y implementación de lista vinculada de la |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Tabla hash y implementación de lista vinculada de la |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Tabla hash y implementación de lista vinculada de la |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Tabla hash y implementación de lista vinculada de la |
| IJavaPeerable.UnregisterFromRuntime() |
Tabla hash y implementación de lista vinculada de 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) |
Tabla hash y implementación de lista vinculada de la |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Intente coerción |