Compartilhar via


ConcurrentHashMap Classe

Definição

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

[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
Herança
ConcurrentHashMap
Atributos
Implementações

Comentários

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações. Essa classe obedece à mesma especificação funcional que java.util.Hashtable, e inclui versões de métodos correspondentes a cada método de Hashtable. No entanto, mesmo que todas as operações sejam thread-safe, as operações <de recuperação não implicam> em>< bloqueio, e não há <suporte><> para bloquear toda a tabela de uma forma que impeça todo o acesso. Essa classe é totalmente interoperável com Hashtable programas que dependem de sua segurança de thread, mas não de seus detalhes de sincronização.

As operações de recuperação (incluindo get) geralmente não bloqueiam, portanto, podem se sobrepor às operações de atualização (incluindo put e remove). As recuperações refletem os resultados das operações de atualização mais recentes <concluídas<>/em> mantidas em seu início. (Mais formalmente, uma operação de atualização para uma determinada chave tem uma <relação em>acontece-antes</em> com qualquer recuperação (não nula) para essa chave relatando o valor atualizado.) Para operações agregadas, como putAll e clear, as recuperações simultâneas podem refletir a inserção ou remoção de apenas algumas entradas. Da mesma forma, Iterators, Spliterators e Enumerations retornam elementos que refletem o estado da tabela de hash em algum ponto ou desde a criação do iterador/enumeração. Eles não jogam </>< em> lançarjava.util.ConcurrentModificationException ConcurrentModificationException. No entanto, os iteradores são projetados para serem usados por apenas um thread por vez. Lembre-se de que os resultados dos métodos de status agregado, incluindo size, isEmptye containsValue normalmente são úteis somente quando um mapa não está passando por atualizações simultâneas em outros threads. Caso contrário, os resultados desses métodos refletem estados transitórios que podem ser adequados para fins de monitoramento ou estimativa, mas não para o controle do programa.

A tabela é expandida dinamicamente quando há muitas colisões (ou seja, chaves que têm códigos hash distintos, mas caem no mesmo módulo de slot do tamanho da tabela), com o efeito médio esperado de manter aproximadamente dois compartimentos por mapeamento (correspondendo a um limite de fator de carga de 0,75 para redimensionamento). Pode haver muita variação em torno dessa média à medida que os mapeamentos são adicionados e removidos, mas, no geral, isso mantém uma compensação de tempo/espaço comumente aceita para tabelas de hash. No entanto, redimensionar este ou qualquer outro tipo de tabela de hash pode ser uma operação relativamente lenta. Quando possível, é uma boa ideia fornecer uma estimativa de tamanho como um argumento de construtor opcional initialCapacity . Um argumento de construtor opcional loadFactor adicional fornece um meio adicional de personalizar a capacidade inicial da tabela, especificando a densidade da tabela a ser usada no cálculo da quantidade de espaço a ser alocada para o determinado número de elementos. Além disso, para compatibilidade com versões anteriores dessa classe, os construtores podem opcionalmente especificar um esperado concurrencyLevel como uma dica adicional para dimensionamento interno. Observe que usar muitas teclas com exatamente o mesmo hashCode() é uma maneira segura de diminuir o desempenho de qualquer tabela de hash. Para melhorar o impacto, quando as chaves são Comparable, essa classe pode usar a ordem de comparação entre as chaves para ajudar a quebrar laços.

Uma Set projeção de um ConcurrentHashMap pode ser criada (usando #newKeySet() ou #newKeySet(int)), ou exibida (usando #keySet(Object) quando apenas chaves são de interesse, e os valores mapeados não são (talvez transitoriamente) usados ou todos têm o mesmo valor de mapeamento.

Um ConcurrentHashMap pode ser usado como um mapa de frequência escalável (uma forma de histograma ou multiset) usando java.util.concurrent.atomic.LongAdder valores e inicializando via #computeIfAbsent computeIfAbsent. Por exemplo, para adicionar uma contagem a um ConcurrentHashMap<String,LongAdder> freqs, você pode usar freqs.computeIfAbsent(key, k -> new LongAdder()).increment();

Essa classe e suas exibições e iteradores implementam todos os <métodos em>optional</em> das Map interfaces e Iterator .

ComoHashtable, mas ao contrário HashMap, esta classe não<null<> permite que>seja usada como uma chave ou valor.

ConcurrentHashMaps suporta um conjunto de operações em massa sequenciais e paralelas que, ao contrário da maioria dos Stream métodos, são projetadas para serem aplicadas com segurança, e muitas vezes de forma sensata, mesmo com mapas que estão sendo atualizados simultaneamente por outros threads, por exemplo, ao calcular um resumo instantâneo dos valores em um registro compartilhado. Há três tipos de operação, cada uma com quatro formulários, aceitando funções com chaves, valores, entradas e pares (chave, valor) como argumentos e/ou valores de retorno. Como os elementos de um ConcurrentHashMap não são ordenados de nenhuma maneira particular e podem ser processados em ordens diferentes em diferentes execuções paralelas, a exatidão das funções fornecidas não deve depender de qualquer ordenação ou de quaisquer outros objetos ou valores que possam mudar transitoriamente enquanto a computação está em andamento; e, com exceção de cada ação, o ideal é que o ideal seja livre de efeitos colaterais. Operações em massa em Map.Entry objetos não oferecem suporte ao método setValue.

<><ul li>forEach: Executa uma determinada ação em cada elemento. Um formulário variante aplica uma determinada transformação em cada elemento antes de executar a ação.

<li>search: retorna o primeiro resultado não nulo disponível da aplicação de uma determinada função em cada elemento, ignorando a pesquisa adicional quando um resultado é encontrado.

<li>reduce: Acumula cada elemento. A função de redução fornecida não pode depender de ordenação (mais formalmente, deve ser tanto associativa quanto comutativa). Existem cinco variantes:

<ul>

<li>Reduções simples. (Não há uma forma desse método para argumentos de função (chave, valor), pois não há nenhum tipo de retorno correspondente.)

<li>Reduções mapeadas que acumulam os resultados de uma determinada função aplicada a cada elemento.

<li>Reduções para duplos escalares, longos e ints, usando um determinado valor base.

</ul></ul>

Essas operações em massa aceitam um parallelismThreshold argumento. Os métodos prosseguem sequencialmente se o tamanho atual do mapa for estimado como menor do que o limite determinado. Usar um valor de Long.MAX_VALUE suprime todo o paralelismo. Usar um valor de 1 resultados em paralelismo máximo particionando em subtarefas suficientes para utilizar totalmente o ForkJoinPool#commonPool() que é usado para todos os cálculos paralelos. Normalmente, você escolheria inicialmente um desses valores extremos e, em seguida, mediria o desempenho do uso de valores intermediários que trocam sobrecarga versus taxa de transferência.

As propriedades de simultaneidade de operações em massa seguem as de ConcurrentHashMap: Qualquer resultado não nulo retornado de e métodos de get(key) acesso relacionados tem uma relação de acontecer antes com a inserção ou atualização associada. O resultado de qualquer operação em massa reflete a composição dessas relações por elemento (mas não é necessariamente atômico em relação ao mapa como um todo, a menos que seja de alguma forma conhecido por ser quiescente). Por outro lado, como as chaves e os valores no mapa nunca são nulos, null serve como um indicador atômico confiável da falta atual de qualquer resultado. Para manter essa propriedade, null serve como uma base implícita para todas as operações de redução não escalar. Para as versões double, long e int, a base deve ser aquela que, quando combinada com qualquer outro valor, retorna esse outro valor (mais formalmente, deve ser o elemento de identidade para a redução). As reduções mais comuns têm essas propriedades; por exemplo, calcular uma soma com base 0 ou um mínimo com base MAX_VALUE.

As funções de pesquisa e transformação fornecidas como argumentos devem igualmente retornar null para indicar a falta de qualquer resultado (caso em que ele não é usado). No caso de reduções mapeadas, isso também permite que as transformações sirvam como filtros, retornando null (ou, no caso de especializações primitivas, a base de identidade) se o elemento não deve ser combinado. Você pode criar transformações e filtros compostos compondo-os você mesmo sob essa regra "null means there is nothing there now" antes de usá-los em operações de pesquisa ou redução.

Os métodos que aceitam e/ou retornam argumentos de entrada mantêm associações chave-valor. Eles podem ser úteis, por exemplo, ao encontrar a chave para o maior valor. Observe que os argumentos de entrada "simples" podem ser fornecidos usando new AbstractMap.SimpleEntry(k,v)o .

As operações em massa podem ser concluídas abruptamente, lançando uma exceção encontrada na aplicação de uma função fornecida. Tenha em mente ao lidar com essas exceções que outras funções em execução simultânea também poderiam ter lançado exceções, ou teriam feito isso se a primeira exceção não tivesse ocorrido.

Acelerações para formas paralelas em comparação com formas sequenciais são comuns, mas não garantidas. Operações paralelas envolvendo funções breves em pequenos mapas podem ser executadas mais lentamente do que formas sequenciais se o trabalho subjacente para paralelizar a computação for mais caro do que a computação em si. Da mesma forma, a paralelização pode não levar a muito paralelismo real se todos os processadores estiverem ocupados executando tarefas não relacionadas.

Todos os argumentos para todos os métodos de tarefa devem ser não-nulos.

Essa classe é membro do Java Collections Framework.

Adicionado em 1.5.

Documentação Java para java.util.concurrent.ConcurrentHashMap.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.

Construtores

ConcurrentHashMap()

Cria um novo mapa vazio com o tamanho padrão da tabela inicial (16).

ConcurrentHashMap(IDictionary)

Cria um novo mapa com os mesmos mapeamentos que o mapa fornecido.

ConcurrentHashMap(Int32)

Cria um novo mapa vazio com um tamanho de tabela inicial acomodando o número especificado de elementos sem a necessidade de redimensionar dinamicamente.

ConcurrentHashMap(Int32, Single)

Cria um novo mapa vazio com um tamanho de tabela inicial com base no número determinado de elementos (initialCapacity) e na densidade inicial da tabela (loadFactor).

ConcurrentHashMap(Int32, Single, Int32)

Cria um novo mapa vazio com um tamanho de tabela inicial com base no número determinado de elementos (initialCapacity), densidade inicial da tabela (loadFactor) e número de threads de atualização simultânea (concurrencyLevel).

ConcurrentHashMap(IntPtr, JniHandleOwnership)

Um construtor usado ao criar representações gerenciadas de objetos JNI; chamado pelo tempo de execução.

Propriedades

Class

Retorna a classe de tempo de execução deste Object.

(Herdado de Object)
Handle

O identificador para a instância subjacente do Android.

(Herdado de Object)
IsEmpty

A ser adicionado

(Herdado de AbstractMap)
JniIdentityHashCode

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
JniPeerMembers

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

PeerReference

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
ThresholdClass

Esta API suporta a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código.

ThresholdType

Esta API suporta a infraestrutura Mono para Android e não se destina a ser usada diretamente do seu código.

Métodos

Clear()

A ser adicionado

(Herdado de AbstractMap)
Clone()

Cria e retorna uma cópia desse objeto.

(Herdado de Object)
Compute(Object, IBiFunction)

Tenta calcular um mapeamento para a chave especificada e seu valor mapeado atual (ou null se não houver mapeamento atual).

ComputeIfAbsent(Object, IFunction)

Se a chave especificada ainda não estiver associada a um valor, tentará calcular seu valor usando a função de mapeamento fornecida e a inserirá nesse mapa, a menos que null.

ComputeIfPresent(Object, IBiFunction)

Se o valor da chave especificada estiver presente, tentará calcular um novo mapeamento com a chave e seu valor mapeado atual.

Contains(Object)

Testa se algumas chaves são mapeadas para o valor especificado nesta tabela.

ContainsKey(Object)

A ser adicionado

(Herdado de AbstractMap)
ContainsValue(Object)

A ser adicionado

(Herdado de AbstractMap)
Dispose()

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
Dispose(Boolean)

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
Elements()

Retorna uma enumeração dos valores nesta tabela.

EntrySet()

Retorna uma Set exibição dos mapeamentos contidos neste mapa.

Equals(Object)

Indica se algum outro objeto é "igual" a este.

(Herdado de Object)
ForEach(IBiConsumer)

Executa a ação fornecida para cada (chave, valor).

ForEach(Int64, IBiConsumer)

Executa a ação fornecida para cada (chave, valor).

ForEach(Int64, IBiFunction, IConsumer)

Executa a ação fornecida para cada transformação não nula de cada (chave, valor).

ForEachEntry(Int64, IConsumer)

Executa a ação fornecida para cada entrada.

ForEachEntry(Int64, IFunction, IConsumer)

Executa a ação fornecida para cada transformação não nula de cada entrada.

ForEachKey(Int64, IConsumer)

Executa a ação fornecida para cada chave.

ForEachKey(Int64, IFunction, IConsumer)

Executa a ação fornecida para cada transformação não nula de cada chave.

ForEachValue(Int64, IConsumer)

Executa a ação fornecida para cada valor.

ForEachValue(Int64, IFunction, IConsumer)

Executa a ação fornecida para cada transformação não nula de cada valor.

Get(Object)

A ser adicionado

(Herdado de AbstractMap)
GetHashCode()

Retorna um valor de código hash para o objeto.

(Herdado de Object)
GetOrDefault(Object, Object)

Retorna o valor para o qual a chave especificada é mapeada ou o valor padrão fornecido se esse mapa não contiver nenhum mapeamento para a chave.

JavaFinalize()

Chamado pelo coletor de lixo em um objeto quando a coleta de lixo determina que não há mais referências ao objeto.

(Herdado de Object)
Keys()

Retorna uma enumeração das chaves nesta tabela.

KeySet()

A ser adicionado

(Herdado de AbstractMap)
MappingCount()

Retorna o número de mapeamentos.

Merge(Object, Object, IBiFunction)

Se a chave especificada ainda não estiver associada a um valor (não nulo), associa-a ao valor fornecido.

Notify()

Ativa um único thread que está aguardando no monitor deste objeto.

(Herdado de Object)
NotifyAll()

Ativa todos os threads que estão aguardando no monitor deste objeto.

(Herdado de Object)
Put(Object, Object)

A ser adicionado

(Herdado de AbstractMap)
PutAll(IDictionary)

A ser adicionado

(Herdado de AbstractMap)
PutIfAbsent(Object, Object)

A ser adicionado

Reduce(Int64, IBiFunction, IBiFunction)

Retorna o resultado de acumular a transformação dada de todos os pares (chave, valor) usando o redutor fornecido para combinar valores, ou null se nenhum.

ReduceEntries(Int64, IBiFunction)

Retorna o resultado de acumular todas as entradas usando o redutor fornecido para combinar valores ou nulo se nenhum.

ReduceEntries(Int64, IFunction, IBiFunction)

Retorna o resultado de acumular a transformação dada de todas as entradas usando o redutor fornecido para combinar valores, ou nulo se nenhum.

ReduceEntriesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Retorna o resultado de acumular a transformação dada de todas as entradas usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceEntriesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Retorna o resultado de acumular a transformação dada de todas as entradas usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceEntriesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Retorna o resultado de acumular a transformação dada de todas as entradas usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceKeys(Int64, IBiFunction)

Retorna o resultado de acumular todas as chaves usando o redutor fornecido para combinar valores ou nulo se nenhum.

ReduceKeys(Int64, IFunction, IBiFunction)

Retorna o resultado de acumular a transformação dada de todas as chaves usando o redutor fornecido para combinar valores, ou null se nenhum.

ReduceKeysToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Retorna o resultado de acumular a transformação dada de todas as chaves usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceKeysToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Retorna o resultado de acumular a transformação dada de todas as chaves usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceKeysToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Retorna o resultado de acumular a transformação dada de todas as chaves usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceToDouble(Int64, IToDoubleBiFunction, Double, IDoubleBinaryOperator)

Retorna o resultado de acumular a transformação dada de todos os pares (chave, valor) usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceToInt(Int64, IToIntBiFunction, Int32, IIntBinaryOperator)

Retorna o resultado de acumular a transformação dada de todos os pares (chave, valor) usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceToLong(Int64, IToLongBiFunction, Int64, ILongBinaryOperator)

Retorna o resultado de acumular a transformação dada de todos os pares (chave, valor) usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceValues(Int64, IBiFunction)

Retorna o resultado de acumular todos os valores usando o redutor fornecido para combinar valores, ou nulo se nenhum.

ReduceValues(Int64, IFunction, IBiFunction)

Retorna o resultado de acumular a transformação dada de todos os valores usando o redutor dado para combinar valores, ou nulo se nenhum.

ReduceValuesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Retorna o resultado de acumular a transformação dada de todos os valores usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceValuesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Retorna o resultado de acumular a transformação dada de todos os valores usando o redutor dado para combinar valores e a base dada como um valor de identidade.

ReduceValuesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Retorna o resultado de acumular a transformação dada de todos os valores usando o redutor dado para combinar valores e a base dada como um valor de identidade.

Remove(Object)

A ser adicionado

(Herdado de AbstractMap)
Remove(Object, Object)

A ser adicionado

Replace(Object, Object)

A ser adicionado

Replace(Object, Object, Object)

A ser adicionado

ReplaceAll(IBiFunction)

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

Search(Int64, IBiFunction)

Retorna um resultado não nulo da aplicação da função de pesquisa fornecida em cada (chave, valor) ou nulo se nenhum.

SearchEntries(Int64, IFunction)

Retorna um resultado não nulo da aplicação da função de pesquisa fornecida em cada entrada, ou nulo se nenhum.

SearchKeys(Int64, IFunction)

Retorna um resultado não nulo da aplicação da função de pesquisa fornecida em cada chave ou nulo se nenhum.

SearchValues(Int64, IFunction)

Retorna um resultado não nulo da aplicação da função de pesquisa fornecida em cada valor, ou nulo se nenhum.

SetHandle(IntPtr, JniHandleOwnership)

Define a propriedade Handle.

(Herdado de Object)
Size()

A ser adicionado

(Herdado de AbstractMap)
ToArray<T>()

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
ToString()

Retorna uma representação de cadeia de caracteres do objeto.

(Herdado de Object)
UnregisterFromRuntime()

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
Values()

A ser adicionado

(Herdado de AbstractMap)
Wait()

Faz com que o thread atual aguarde até que ele seja ativado, normalmente sendo <em notificado</em> ou <em>interrompido</em>>.

(Herdado de Object)
Wait(Int64)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente sendo <em>notificado</em> ou <em interrompido</em>, ou até que>uma certa quantidade de tempo real tenha decorrido.

(Herdado de Object)
Wait(Int64, Int32)

Faz com que o thread atual aguarde até que ele seja despertado, normalmente sendo <em>notificado</em> ou <em interrompido</em>, ou até que>uma certa quantidade de tempo real tenha decorrido.

(Herdado de Object)

Implantações explícitas de interface

IJavaPeerable.Disposed()

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
IJavaPeerable.DisposeUnlessReferenced()

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
IJavaPeerable.Finalized()

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
IJavaPeerable.JniManagedPeerState

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

(Herdado de Object)

Métodos de Extensão

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo verificada em tempo de execução do Android.

JavaCast<TResult>(IJavaObject)

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

GetJniTypeName(IJavaPeerable)

Uma tabela de hash que oferece suporte à simultaneidade completa de recuperações e à alta simultaneidade esperada para atualizações.

Aplica-se a