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 un orden de iteración predecible.
[Android.Runtime.Register("java/util/LinkedHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class LinkedHashMap : Java.Util.HashMap, IDisposable, Java.Interop.IJavaPeerable
[<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
- Herencia
- Atributos
- Implementaciones
Comentarios
Tabla hash y implementación de lista vinculada de la Map
interfaz, con un orden de iteración predecible. 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 iteración, que normalmente es el orden en el que se insertaron las claves en el mapa (orden de inserción). Tenga en cuenta que el orden de inserción no se ve afectado si se vuelve a insertar una clave en el mapa. (Se reinserta 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).
Esta implementación reserva 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:
void foo(Map m) {
Map copy = new LinkedHashMap(m);
...
}
Esta técnica es especialmente útil si un módulo toma un mapa en la entrada, lo copia y, posteriormente, 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 elemento especial #LinkedHashMap(int,float,boolean) constructor
para crear un mapa hash vinculado cuyo orden de iteración es el orden en el que se accedió por última vez a sus entradas, desde la última vez a la que se accedió más recientemente (orden de acceso). Este tipo de mapa es adecuado para crear cachés LRU. La invocación de los put
métodos , putIfAbsent
, get
, getOrDefault
computeIfAbsent
compute
, , computeIfPresent
, o 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. En concreto, las operaciones en vistas de colección no afectan al orden de iteración del mapa de respaldo.
El #removeEldestEntry(Map.Entry)
método se puede invalidar para imponer una directiva para quitar asignaciones obsoletas automáticamente cuando se agregan nuevas asignaciones al mapa.
Esta clase proporciona todas las operaciones opcionales Map
y permite elementos NULL. Al igual HashMap
que , proporciona un rendimiento de tiempo constante para las operaciones básicas (add
, contains
y remove
), 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: la iteración en 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 de un HashMap
elemento 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 a un mapa hash vinculado simultáneamente y al menos uno de los subprocesos modifica el mapa estructuralmente, se <>debe< sincronizar> 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 sincronizado 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 propio remove
método del iterador, el iterador iniciará un ConcurrentModificationException
. Por lo tanto, ante 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 el comportamiento rápido de error de un iterador no se puede garantizar tal como está, por lo general, imposible hacer que las garantías difíciles en presencia de modificaciones simultáneas no sincronizadas. 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 exactitud: 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 notifican 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 Spliterator 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 objeto (noparallel) java.util.stream.Stream
a partir de este tipo de .Spliterator
</ul> Tenga en cuenta que estas soluciones alternativas solo se sugieren donde lhm
es .LinkedHashMap
Esta clase es miembro de Java Collections Framework.
Se agregó en la versión 1.4.
Documentación de Java para java.util.LinkedHashMap
.
Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código Project y que se usan según los términos Creative Commons 2.5 Attribution License.
Constructores
LinkedHashMap() |
Construye una instancia vacía ordenada por |
LinkedHashMap(IDictionary) |
Construye una instancia ordenada de |
LinkedHashMap(Int32) |
Construye una instancia vacía ordenada por |
LinkedHashMap(Int32, Single) |
Construye una instancia vacía ordenada por |
LinkedHashMap(Int32, Single, Boolean) |
Construye una instancia vacía |
LinkedHashMap(IntPtr, JniHandleOwnership) |
Constructor utilizado al crear representaciones administradas de objetos JNI; llamado por el tiempo 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 |
Que se va a agregar (Heredado de AbstractMap) |
JniIdentityHashCode |
Tabla hash y implementación de lista vinculada de la |
JniPeerMembers |
Tabla hash y implementación de lista vinculada de la |
PeerReference |
Tabla hash y implementación de lista vinculada de 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() |
Que se va a 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 |
ContainsKey(Object) |
Que se va a agregar (Heredado de AbstractMap) |
ContainsValue(Object) |
Que se va a agregar (Heredado de AbstractMap) |
Dispose() |
Tabla hash y implementación de lista vinculada de la |
Dispose(Boolean) |
Tabla hash y implementación de lista vinculada de la |
EntrySet() |
Devuelve una |
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) |
Que se va a 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() |
Que se va a agregar (Heredado de AbstractMap) |
Merge(Object, Object, IBiFunction) |
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) |
Que se va a agregar (Heredado de AbstractMap) |
PutAll(IDictionary) |
Que se va a agregar (Heredado de AbstractMap) |
PutIfAbsent(Object, Object) |
Tabla hash y implementación de lista vinculada de la |
Remove(Object) |
Que se va a agregar (Heredado de AbstractMap) |
Remove(Object, Object) |
Quita la asignación de la clave especificada de este mapa si está presente. (Heredado de HashMap) |
RemoveEldestEntry(IMapEntry) |
Devuelve |
Replace(Object, Object) |
Tabla hash y implementación de lista vinculada de la |
Replace(Object, Object, Object) |
Tabla hash y implementación de lista vinculada de la |
ReplaceAll(IBiFunction) |
Tabla hash y implementación de lista vinculada de la |
SetHandle(IntPtr, JniHandleOwnership) |
Establece la propiedad Handle. (Heredado de Object) |
Size() |
Que se va a agregar (Heredado de AbstractMap) |
ToArray<T>() |
Tabla hash y implementación de lista vinculada de la |
ToString() |
Devuelve una representación de cadena del objeto. (Heredado de Object) |
UnregisterFromRuntime() |
Tabla hash y implementación de lista vinculada de la |
Values() |
Que se va a 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 <em>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 <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
IJavaPeerable.Disposed() |
Tabla hash y implementación de lista vinculada de la |
IJavaPeerable.DisposeUnlessReferenced() |
Tabla hash y implementación de lista vinculada de la |
IJavaPeerable.Finalized() |
Tabla hash y implementación de lista vinculada de la |
IJavaPeerable.JniManagedPeerState |
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 |
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) |
Tabla hash y implementación de lista vinculada de la |
GetJniTypeName(IJavaPeerable) |
Tabla hash y implementación de lista vinculada de la |