ConcurrentHashMap Clase

Definición

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

[Android.Runtime.Register("java/util/concurrent/ConcurrentHashMap", DoNotGenerateAcw=true)]
[Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })]
public class ConcurrentHashMap : Java.Util.AbstractMap, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Util.Concurrent.IConcurrentMap
[<Android.Runtime.Register("java/util/concurrent/ConcurrentHashMap", DoNotGenerateAcw=true)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "K", "V" })>]
type ConcurrentHashMap = class
    inherit AbstractMap
    interface ISerializable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
    interface IConcurrentMap
    interface IMap
Herencia
ConcurrentHashMap
Atributos
Implementaciones

Comentarios

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones. Esta clase obedece la misma especificación funcional que java.util.Hashtablee incluye versiones de métodos correspondientes a cada método de Hashtable. Sin embargo, aunque todas las operaciones son seguras para subprocesos, las operaciones <de recuperación no>< implican>bloqueo, y <no< hay compatibilidad con em>/em> para bloquear toda la tabla de una manera que impida todo el acceso. Esta clase es totalmente interoperable con Hashtable en programas que dependen de su seguridad de subprocesos, pero no en sus detalles de sincronización.

Por lo general, las operaciones de recuperación (incluidas get) no se bloquean, por lo que se pueden superponer con las operaciones de actualización (incluidas put y remove). Las recuperaciones reflejan los resultados de las operaciones de actualización completadas</em> más recientes <>que se mantienen en su inicio. (Más formalmente, una operación de actualización para una clave determinada lleva una <relación em-before<>/em> con cualquier recuperación (no null) para esa clave que informa del valor actualizado). En el caso de las operaciones de agregado como putAll y clear, las recuperaciones simultáneas pueden reflejar la inserción o eliminación de solo algunas entradas. Del mismo modo, iteradores, spliteradores y enumeraciones devuelven elementos que reflejan el estado de la tabla hash en algún momento o desde la creación del iterador o enumeración. Ellos no <<>java.util.ConcurrentModificationException ConcurrentModificationExceptioninician .> Sin embargo, los iteradores están diseñados para ser utilizados por un único subproceso a la vez. Tenga en cuenta que los resultados de los métodos de estado agregados, incluidos size, isEmptyy containsValue suelen ser útiles solo cuando un mapa no está realizando actualizaciones simultáneas en otros subprocesos. De lo contrario, los resultados de estos métodos reflejan estados transitorios que pueden ser adecuados para fines de supervisión o estimación, pero no para el control de programas.

La tabla se expande dinámicamente cuando hay demasiadas colisiones (es decir, claves que tienen códigos hash distintos, pero se dividen en el mismo módulo de ranura del tamaño de la tabla), con el efecto medio esperado de mantener aproximadamente dos contenedores por asignación (correspondiente a un umbral de factor de carga de 0,75 para cambiar el tamaño). Puede haber mucha varianza alrededor de este promedio a medida que se agregan y quitan asignaciones, pero en general, esto mantiene un equilibrio de tiempo y espacio comúnmente aceptado para las tablas hash. Sin embargo, cambiar el tamaño de esta tabla o cualquier otro tipo de tabla hash puede ser una operación relativamente lenta. Cuando sea posible, es recomendable proporcionar una estimación de tamaño como argumento de constructor opcional initialCapacity . Un argumento de constructor opcional loadFactor adicional proporciona un medio adicional para personalizar la capacidad inicial de la tabla especificando la densidad de tabla que se va a usar para calcular la cantidad de espacio que se va a asignar para el número determinado de elementos. Además, para la compatibilidad con versiones anteriores de esta clase, los constructores pueden especificar opcionalmente una concurrencyLevel sugerencia adicional para el ajuste de tamaño interno. Tenga en cuenta que el uso de muchas claves con exactamente lo mismo hashCode() es una manera segura de ralentizar el rendimiento de cualquier tabla hash. Para mejorar el impacto, cuando las claves son Comparable, esta clase puede usar el orden de comparación entre las claves para ayudar a romper los vínculos.

Se Set puede crear una proyección de concurrentHashMap (mediante #newKeySet() o #newKeySet(int)), o ver (usando #keySet(Object) cuando solo las claves son de interés, y los valores asignados no se usan (quizás de forma transitoria) o todos toman el mismo valor de asignación.

ConcurrentHashMap se puede usar como un mapa de frecuencia escalable (una forma de histograma o multiconjunto) mediante java.util.concurrent.atomic.LongAdder valores e inicializando a través #computeIfAbsent computeIfAbsentde . Por ejemplo, para agregar un recuento a , ConcurrentHashMap<String,LongAdder> freqspuede usar . freqs.computeIfAbsent(key, k -> new LongAdder()).increment();

Esta clase y sus vistas e iteradores implementan todos los métodos em>opcionales</em> de las Map interfaces y Iterator .<

Al igual Hashtable que pero a diferencia HashMapde , esta clase no><<> permite null usarse como clave o valor.

ConcurrentHashMaps admite un conjunto de operaciones masivas secuenciales y paralelas que, a diferencia de la mayoría Stream de los métodos, están diseñadas para ser seguras y, a menudo, aplicadas incluso con mapas que otros subprocesos actualizan simultáneamente; por ejemplo, al calcular un resumen de instantáneas de los valores en un registro compartido. Hay tres tipos de operación, cada uno con cuatro formas, aceptando funciones con claves, valores, entradas y pares (clave, valor) como argumentos o valores devueltos. Dado que los elementos de concurrentHashMap no están ordenados de ninguna manera determinada y pueden procesarse en diferentes órdenes en ejecuciones paralelas diferentes, la corrección de las funciones proporcionadas no debe depender de ninguna ordenación, ni de ningún otro objeto o valor que pueda cambiar transitoriamente mientras el cálculo está en curso; y excepto para las acciones forEach, idealmente debe ser libre de efectos secundarios. Las operaciones masivas en Map.Entry objetos no admiten el método setValue.

<ul><li>forEach: realiza una acción determinada en cada elemento. Un formulario variant aplica una transformación determinada en cada elemento antes de realizar la acción.

<li>search: devuelve el primer resultado no NULL disponible de aplicar una función determinada en cada elemento; omite la búsqueda adicional cuando se encuentra un resultado.

<li>reduce: acumula cada elemento. La función de reducción proporcionada no puede basarse en la ordenación (más formalmente, debe ser asociativa y conmutativa). Hay cinco variantes:

<ul>

<li>Plain reductions. (No hay una forma de este método para los argumentos de función (clave, valor), ya que no hay ningún tipo de valor devuelto correspondiente).

<li>Reducciones asignadas que acumulan los resultados de una función determinada aplicada a cada elemento.

<li>Reducciones a dobles escalares, longs e ints, utilizando un valor base determinado.

</ul></ul>

Estas operaciones masivas aceptan un parallelismThreshold argumento. Los métodos continúan secuencialmente si se estima que el tamaño del mapa actual es menor que el umbral especificado. El uso de un valor de Long.MAX_VALUE suprime todo el paralelismo. El uso de un valor de 1 da como resultado el paralelismo máximo mediante la partición en suficientes subtareas para utilizar completamente el ForkJoinPool#commonPool() que se usa para todos los cálculos paralelos. Normalmente, inicialmente elegiría uno de estos valores extremos y, a continuación, mediría el rendimiento del uso de valores entre los que se intercambian la sobrecarga frente al rendimiento.

Las propiedades de simultaneidad de las operaciones masivas siguen de las de ConcurrentHashMap: los resultados no NULL devueltos por y los métodos de get(key) acceso relacionados llevan una relación anterior a la inserción o actualización asociada. El resultado de cualquier operación masiva refleja la composición de estas relaciones por elemento (pero no es necesariamente atómica con respecto al mapa en su conjunto, a menos que se sepa que es inactivo). Por el contrario, dado que las claves y los valores del mapa nunca son NULL, null actúa como un indicador atómico confiable de la falta actual de cualquier resultado. Para mantener esta propiedad, null sirve como base implícita para todas las operaciones de reducción no escalares. Para las versiones double, long e int, la base debe ser una que, cuando se combina con cualquier otro valor, devuelve ese otro valor (más formalmente, debe ser el elemento de identidad para la reducción). Las reducciones más comunes tienen estas propiedades; por ejemplo, calcular una suma con base 0 o un mínimo con base MAX_VALUE.

Las funciones de búsqueda y transformación proporcionadas como argumentos deben devolver null de forma similar para indicar la falta de cualquier resultado (en cuyo caso no se usa). En el caso de reducciones asignadas, esto también permite que las transformaciones actúen como filtros, devolviendo null (o, en el caso de especializaciones primitivas, la base de identidad) si el elemento no debe combinarse. Puede crear transformaciones compuestas y filtros componiendolas usted mismo en esta regla "null significa que no hay nada allí ahora" antes de usarlas en operaciones de búsqueda o reducción.

Los métodos que aceptan o devuelven argumentos Entry mantienen asociaciones clave-valor. Pueden ser útiles, por ejemplo, al buscar la clave para el mayor valor. Tenga en cuenta que se pueden proporcionar argumentos de entrada "sin formato" mediante new AbstractMap.SimpleEntry(k,v).

Las operaciones masivas pueden completarse abruptamente, lo que produce una excepción encontrada en la aplicación de una función proporcionada. Tenga en cuenta al controlar estas excepciones que otras funciones que se ejecutan simultáneamente también podrían haber producido excepciones o lo habrían hecho si no se hubiera producido la primera excepción.

Las velocidades para paralelos en comparación con los formularios secuenciales son comunes, pero no están garantizadas. Las operaciones paralelas que implican funciones breves en mapas pequeños pueden ejecutarse más lentamente que los formularios secuenciales si el trabajo subyacente para paralelizar el cálculo es más caro que el propio cálculo. De forma similar, la paralelización puede no provocar un paralelismo real si todos los procesadores están ocupados realizando tareas no relacionadas.

Todos los argumentos de todos los métodos de tarea deben ser no NULL.

Esta clase es miembro de Java Collections Framework.

Agregado en 1.5.

Documentación de Java para java.util.concurrent.ConcurrentHashMap.

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

ConcurrentHashMap()

Crea un nuevo mapa vacío con el tamaño de tabla inicial predeterminado (16).

ConcurrentHashMap(IDictionary)

Crea un nuevo mapa con las mismas asignaciones que el mapa especificado.

ConcurrentHashMap(Int32)

Crea un nuevo mapa vacío con un tamaño de tabla inicial que adapta el número especificado de elementos sin necesidad de cambiar el tamaño dinámicamente.

ConcurrentHashMap(Int32, Single)

Crea un nuevo mapa vacío con un tamaño de tabla inicial basado en el número especificado de elementos (initialCapacity) y la densidad de tabla inicial (loadFactor).

ConcurrentHashMap(Int32, Single, Int32)

Crea un nuevo mapa vacío con un tamaño de tabla inicial basado en el número especificado de elementos (), la densidad de tabla inicial (initialCapacityloadFactor) y el número de subprocesos de actualización simultánea (concurrencyLevel).

ConcurrentHashMap(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 Objectobjeto .

(Heredado de Object)
Handle

Identificador de la instancia de Android subyacente.

(Heredado de Object)
IsEmpty

Que se va a agregar

(Heredado de AbstractMap)
JniIdentityHashCode

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
JniPeerMembers

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

PeerReference

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(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

Clear()

Que se va a agregar

(Heredado de AbstractMap)
Clone()

Crea y devuelve una copia de este objeto.

(Heredado de Object)
Compute(Object, IBiFunction)

Intenta calcular una asignación para la clave especificada y su valor asignado actual (o null si no hay ninguna asignación actual).

ComputeIfAbsent(Object, IFunction)

Si la clave especificada aún no está asociada a un valor, intenta calcular su valor mediante la función de asignación especificada y la escribe en este mapa a menos nullque .

ComputeIfPresent(Object, IBiFunction)

Si el valor de la clave especificada está presente, intenta calcular una nueva asignación dada la clave y su valor asignado actual.

Contains(Object)

Comprueba si algunas claves se asignan al valor especificado en esta tabla.

ContainsKey(Object)

Que se va a agregar

(Heredado de AbstractMap)
ContainsValue(Object)

Que se va a agregar

(Heredado de AbstractMap)
Dispose()

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
Dispose(Boolean)

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
Elements()

Devuelve una enumeración de los valores de esta tabla.

EntrySet()

Devuelve una Set vista de las asignaciones contenidas en este mapa.

Equals(Object)

Indica si algún otro objeto es "igual a" este.

(Heredado de Object)
ForEach(IBiConsumer)

Realiza la acción especificada para cada (clave, valor).

ForEach(Int64, IBiConsumer)

Realiza la acción especificada para cada (clave, valor).

ForEach(Int64, IBiFunction, IConsumer)

Realiza la acción especificada para cada transformación que no sea NULL de cada (clave, valor).

ForEachEntry(Int64, IConsumer)

Realiza la acción especificada para cada entrada.

ForEachEntry(Int64, IFunction, IConsumer)

Realiza la acción especificada para cada transformación que no sea NULL de cada entrada.

ForEachKey(Int64, IConsumer)

Realiza la acción especificada para cada clave.

ForEachKey(Int64, IFunction, IConsumer)

Realiza la acción especificada para cada transformación que no sea NULL de cada clave.

ForEachValue(Int64, IConsumer)

Realiza la acción especificada para cada valor.

ForEachValue(Int64, IFunction, IConsumer)

Realiza la acción especificada para cada transformación que no sea NULL de cada valor.

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)

Devuelve el valor al que se asigna la clave especificada o el valor predeterminado especificado si este mapa no contiene ninguna asignación para la clave.

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)
Keys()

Devuelve una enumeración de las claves de esta tabla.

KeySet()

Que se va a agregar

(Heredado de AbstractMap)
MappingCount()

Devuelve el número de asignaciones.

Merge(Object, Object, IBiFunction)

Si la clave especificada aún no está asociada a un valor (distinto de NULL), lo asocia al valor especificado.

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)

Que se va a agregar

Reduce(Int64, IBiFunction, IBiFunction)

Devuelve el resultado de acumular la transformación dada de todos los pares (clave, valor) mediante el reductor especificado para combinar valores, o null si ninguno.

ReduceEntries(Int64, IBiFunction)

Devuelve el resultado de acumular todas las entradas utilizando el reductor especificado para combinar valores, o null si no hay ninguno.

ReduceEntries(Int64, IFunction, IBiFunction)

Devuelve el resultado de acumular la transformación dada de todas las entradas mediante el reductor especificado para combinar valores, o null si no hay ninguno.

ReduceEntriesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las entradas que usan el reductor dado para combinar valores y la base especificada como valor de identidad.

ReduceEntriesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las entradas que usan el reductor dado para combinar valores y la base especificada como valor de identidad.

ReduceEntriesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las entradas que usan el reductor dado para combinar valores y la base especificada como valor de identidad.

ReduceKeys(Int64, IBiFunction)

Devuelve el resultado de acumular todas las claves utilizando el reductor especificado para combinar valores, o null si ninguno.

ReduceKeys(Int64, IFunction, IBiFunction)

Devuelve el resultado de acumular la transformación dada de todas las claves mediante el reductor especificado para combinar valores, o null si no existe.

ReduceKeysToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las claves utilizando el reductor dado para combinar valores y la base especificada como valor de identidad.

ReduceKeysToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las claves utilizando el reductor dado para combinar valores y la base especificada como valor de identidad.

ReduceKeysToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las claves utilizando el reductor dado para combinar valores y la base especificada como valor de identidad.

ReduceToDouble(Int64, IToDoubleBiFunction, Double, IDoubleBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todos los pares (clave, valor) mediante el reductor especificado para combinar valores y la base especificada como valor de identidad.

ReduceToInt(Int64, IToIntBiFunction, Int32, IIntBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todos los pares (clave, valor) mediante el reductor especificado para combinar valores y la base especificada como valor de identidad.

ReduceToLong(Int64, IToLongBiFunction, Int64, ILongBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todos los pares (clave, valor) mediante el reductor especificado para combinar valores y la base especificada como valor de identidad.

ReduceValues(Int64, IBiFunction)

Devuelve el resultado de acumular todos los valores utilizando el reductor especificado para combinar valores, o null si ninguno.

ReduceValues(Int64, IFunction, IBiFunction)

Devuelve el resultado de acumular la transformación dada de todos los valores mediante el reductor especificado para combinar valores, o null si no es ninguno.

ReduceValuesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todos los valores mediante el reductor dado para combinar valores y la base especificada como valor de identidad.

ReduceValuesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todos los valores mediante el reductor dado para combinar valores y la base especificada como valor de identidad.

ReduceValuesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todos los valores mediante el reductor dado para combinar valores y la base especificada como valor de identidad.

Remove(Object)

Que se va a agregar

(Heredado de AbstractMap)
Remove(Object, Object)

Que se va a agregar

Replace(Object, Object)

Que se va a agregar

Replace(Object, Object, Object)

Que se va a agregar

ReplaceAll(IBiFunction)

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

Search(Int64, IBiFunction)

Devuelve un resultado que no es NULL al aplicar la función de búsqueda especificada en cada (clave, valor) o null si no existe.

SearchEntries(Int64, IFunction)

Devuelve un resultado que no es NULL al aplicar la función de búsqueda especificada en cada entrada, o null si no existe.

SearchKeys(Int64, IFunction)

Devuelve un resultado que no es NULL al aplicar la función de búsqueda especificada en cada clave, o null si no es ninguno.

SearchValues(Int64, IFunction)

Devuelve un resultado que no es NULL al aplicar la función de búsqueda especificada en cada valor, o null si no es ninguno.

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
Size()

Que se va a agregar

(Heredado de AbstractMap)
ToArray<T>()

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
ToString()

Devuelve una representación de cadena del objeto.

(Heredado de Object)
UnregisterFromRuntime()

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
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()

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
IJavaPeerable.DisposeUnlessReferenced()

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
IJavaPeerable.Finalized()

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
IJavaPeerable.JniManagedPeerState

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

(Heredado de Object)

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)

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

GetJniTypeName(IJavaPeerable)

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad esperada alta para las actualizaciones.

Se aplica a