Compartir a través de


ConcurrentHashMap Clase

Definición

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad alta esperada 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 alta esperada para las actualizaciones. Esta clase cumple 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 sean seguras para subprocesos, las operaciones de recuperación no <><>implican bloqueo, y hay <em>no</em> ninguna compatibilidad para bloquear toda la tabla de una manera que impida todo el acceso. Esta clase es totalmente interoperable con Hashtable en programas que se basan en su seguridad de subprocesos, pero no en sus detalles de sincronización.

Por lo general, las operaciones de recuperación (incluido get) no se bloquean, por lo que puede superponerse con las operaciones de actualización (incluidas put y remove). Las recuperaciones reflejan los resultados de las operaciones de actualización de em>completed</em> más recientes <que se mantienen durante 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/enumeración. Ellos no <<>java.util.ConcurrentModificationException ConcurrentModificationExceptionlanzan .> Sin embargo, los iteradores están diseñados para que los usen solo un 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 del programa.

La tabla se expande dinámicamente cuando hay demasiadas colisiones (es decir, claves que tienen códigos hash distintos, pero entran 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 adicional loadFactor 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 sugerencia adicional concurrencyLevel para el ajuste de tamaño interno. Tenga en cuenta que el uso de muchas claves con exactamente el 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 son (quizás transitorios) no se usan 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 inicialización 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, se aplican con sensibilidad, 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 formularios, aceptando funciones con claves, valores, entradas y pares (clave, valor) como argumentos o valores devueltos. Dado que los elementos de concurrentHashMap no se ordenan de ninguna manera determinada y pueden procesarse en diferentes órdenes en distintas ejecuciones paralelas, 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 aún más la búsqueda 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 tanto asociativa como conmutativa). Hay cinco variantes:

<ul>

<li>Simples reducciones. (No hay ninguna 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>Reduce a dobles escalares, longs e ints, utilizando un valor de 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 creación de particiones en suficientes subtareas para usar completamente el ForkJoinPool#commonPool() que se usa para todos los cálculos paralelos. Normalmente, elegiría inicialmente uno de estos valores extremos y, a continuación, mediría el rendimiento del uso de valores entre valores que resarían la sobrecarga frente al rendimiento.

Las propiedades de simultaneidad de las operaciones masivas siguen a las de ConcurrentHashMap: cualquier resultado que no sea NULL devuelto por los métodos de get(key) acceso relacionados y tenga 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 de alguna manera es quiescent). 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 ningún 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 y 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 de forma similar null para indicar la falta de cualquier resultado (en cuyo caso no se usa). En el caso de las 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 redactándolas 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 de clave-valor. Pueden ser útiles, por ejemplo, al buscar la clave para el mayor valor. Tenga en cuenta que los argumentos de entrada "sin formato" se pueden proporcionar mediante new AbstractMap.SimpleEntry(k,v).

Las operaciones masivas pueden completarse abruptamente, lo que produce una excepción 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 garantizadas. Las operaciones paralelas que implican funciones breves en mapas pequeños pueden ejecutarse más lentamente que las formas 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 abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Constructores

ConcurrentHashMap()

Crea una asignación nueva y vacía 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 permite el número especificado de elementos sin necesidad de cambiar el tamaño dinámicamente.

ConcurrentHashMap(Int32, Single)

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

ConcurrentHashMap(Int32, Single, Int32)

Crea un mapa nuevo y vacío con un tamaño de tabla inicial basado en el número determinado 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

Para agregar

(Heredado de AbstractMap)
JniIdentityHashCode

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

(Heredado de Object)
JniPeerMembers

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

PeerReference

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad alta esperada 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()

Para 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 lo 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)

Para agregar

(Heredado de AbstractMap)
ContainsValue(Object)

Para agregar

(Heredado de AbstractMap)
Dispose()

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

(Heredado de Object)
Dispose(Boolean)

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad alta esperada 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 dada 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 dada 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)

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

Para 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)

Para agregar

(Heredado de AbstractMap)
PutAll(IDictionary)

Para agregar

(Heredado de AbstractMap)
PutIfAbsent(Object, Object)

Para 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 no existe.

ReduceEntries(Int64, IBiFunction)

Devuelve el resultado de acumular todas las entradas mediante el reductor especificado para combinar valores, o null si no existe.

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 ninguno.

ReduceEntriesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las entradas mediante el reductor especificado para combinar valores y la base dada como valor de identidad.

ReduceEntriesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las entradas mediante el reductor especificado para combinar valores y la base dada como valor de identidad.

ReduceEntriesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las entradas mediante el reductor especificado para combinar valores y la base dada como valor de identidad.

ReduceKeys(Int64, IBiFunction)

Devuelve el resultado de acumular todas las claves mediante 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 mediante el reductor especificado para combinar valores y la base dada como valor de identidad.

ReduceKeysToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

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

ReduceKeysToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todas las claves mediante el reductor especificado para combinar valores y la base dada 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 dada 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 dada 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 dada como valor de identidad.

ReduceValues(Int64, IBiFunction)

Devuelve el resultado de acumular todos los valores mediante el reductor especificado para combinar valores, o null si no existe.

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 ninguno.

ReduceValuesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Devuelve el resultado de acumular la transformación dada de todos los valores mediante el reductor especificado para combinar valores y la base dada 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 especificado para combinar valores y la base dada 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 especificado para combinar valores y la base dada como valor de identidad.

Remove(Object)

Para agregar

(Heredado de AbstractMap)
Remove(Object, Object)

Para agregar

Replace(Object, Object)

Para agregar

Replace(Object, Object, Object)

Para agregar

ReplaceAll(IBiFunction)

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

Search(Int64, IBiFunction)

Devuelve un resultado que no es NULL al aplicar la función de búsqueda dada 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 dada 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 existe.

SearchValues(Int64, IFunction)

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

SetHandle(IntPtr, JniHandleOwnership)

Establece la propiedad Handle.

(Heredado de Object)
Size()

Para agregar

(Heredado de AbstractMap)
ToArray<T>()

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad alta esperada 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 alta esperada para las actualizaciones.

(Heredado de Object)
Values()

Para 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)

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 alta esperada para las actualizaciones.

(Heredado de Object)
IJavaPeerable.DisposeUnlessReferenced()

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

(Heredado de Object)
IJavaPeerable.Finalized()

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

(Heredado de Object)
IJavaPeerable.JniManagedPeerState

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

(Heredado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

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

(Heredado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

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

(Heredado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Una tabla hash que admite la simultaneidad completa de las recuperaciones y la simultaneidad alta esperada 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 alta esperada para las actualizaciones.

GetJniTypeName(IJavaPeerable)

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

Se aplica a