Поделиться через


ConcurrentHashMap Класс

Определение

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

[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
Наследование
ConcurrentHashMap
Атрибуты
Реализации

Комментарии

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений. Этот класс подчиняется той же функциональной спецификации, что java.util.Hashtableи включает версии методов, соответствующих каждому методу Hashtable. Тем не менее, несмотря на то, что все операции <>являются потокобезопасны, операции извлечения не< /em> влечет за собой блокировку, и не<<> поддерживается> блокировка всей таблицы таким образом, чтобы предотвратить весь доступ. Этот класс полностью совместим с Hashtable программами, которые зависят от безопасности потоков, но не от сведений о синхронизации.

Операции извлечения (включая get) обычно не блокируются, поэтому могут перекрываться операциями обновления (включая put и remove). Получение отражает результаты последних <>завершенных< или> эм-операций обновления при их начале. (Более формально операция обновления для заданного ключа имеет <отношение em-before></em> с любым (ненулевым) получением для этого ключа, сообщающего об обновленном значении.) Для статистических операций, таких как putAll и clearодновременные извлечение, может отражать вставку или удаление только некоторых записей. Аналогичным образом итераторы, разделители и перечисления возвращают элементы, отражающие состояние хэш-таблицы в определенный момент или после создания итератора или перечисления. <>Они не</em> бросаютjava.util.ConcurrentModificationException ConcurrentModificationException. Однако итераторы предназначены для использования только одним потоком за раз. Помните, что результаты методов агрегатного состояния, включая size, isEmptyи containsValue обычно полезны, только если карта не проходит параллельных обновлений в других потоках. В противном случае результаты этих методов отражают временные состояния, которые могут быть достаточными для мониторинга или оценки, но не для управления программой.

Таблица динамически расширяется, если слишком много конфликтов (т. е. ключи с различными хэш-кодами, но попадают в один и тот же размер таблицы в слоте), при этом ожидаемый средний эффект поддержания примерно двух ячеек на сопоставление (соответствующее пороговой величине 0,75 коэффициента нагрузки для изменения размера). Может быть много дисперсии в этом среднем по мере добавления и удаления сопоставлений, но в целом это поддерживает распространенный компромисс времени и пространства для хэш-таблиц. Однако изменение размера этой или любой другой хэш-таблицы может быть относительно медленной операцией. По возможности рекомендуется предоставить оценку размера как необязательный initialCapacity аргумент конструктора. Дополнительный необязательный loadFactor аргумент конструктора предоставляет дополнительные средства настройки начальной емкости таблицы путем указания плотности таблицы, используемой при вычислении объема пространства, выделяемого для заданного количества элементов. Кроме того, для совместимости с предыдущими версиями этого класса конструкторы могут при необходимости указать ожидаемое concurrencyLevel значение в качестве дополнительного указания для внутреннего изменения размера. Обратите внимание, что использование множества ключей с одинаковым hashCode() способом замедления производительности любой хэш-таблицы. Чтобы повысить эффективность, если ключи имеют Comparableзначение, этот класс может использовать порядок сравнения между ключами, чтобы помочь разорвать связи.

Set Проекция ConcurrentHashMap может быть создана (с помощью #newKeySet() или#newKeySet(int)) или просмотрен (если #keySet(Object) используются только ключи, и сопоставленные значения не используются (возможно, временно) или все принимают одно и то же значение сопоставления.

Параллельная картаHashMap может использоваться как масштабируемая карта частоты (форма гистограммы или мультисети) с помощью java.util.concurrent.atomic.LongAdder значений и инициализации с помощью #computeIfAbsent computeIfAbsent. Например, чтобы добавить число в число ConcurrentHashMap<String,LongAdder> freqs, можно использовать freqs.computeIfAbsent(key, k -> new LongAdder()).increment();

Этот класс и его представления и итераторы реализуют все <методы Map em>необязательных< или em-интерфейсов>.Iterator

Как Hashtable и в отличие от HashMapэтого, этот класс <>не</em> позволяет null использовать в качестве ключа или значения.

ParallelHashMaps поддерживает набор последовательных и параллельных массовых операций, которые, в отличие от большинства Stream методов, предназначены для безопасного и часто разумного применения даже с картами, которые одновременно обновляются другими потоками. Например, при вычислении сводки моментальных снимков значений в общем реестре. Существует три типа операций, каждая из которых имеет четыре формы, прием функций с ключами, значениями, записями и (ключом, значением) в виде аргументов и /или возвращаемых значений. Поскольку элементы ParallelHashMap не упорядочены в определенном порядке и могут обрабатываться в разных заказах в разных параллельных выполнениях, правильность предоставленных функций не должна зависеть от какого-либо упорядочения или от других объектов или значений, которые могут временно измениться во время выполнения вычислений; и за исключением действийEach, в идеале должны быть побочными эффектами без побочных эффектов. Массовые операции с Map.Entry объектами не поддерживают метод setValue.

<ul><li>forEach: выполняет заданное действие для каждого элемента. Вариантная форма применяет данное преобразование к каждому элементу перед выполнением действия.

<li>search: возвращает первый доступный ненулевой результат применения данной функции к каждому элементу; пропускает дальнейший поиск при обнаружении результата.

<li>reduce: накапливает каждый элемент. Указанная функция сокращения не может полагаться на упорядочение (более формально она должна быть как ассоциативной, так и коммутативной). Существует пять вариантов:

<ul>

<li>Обычные сокращения. (Нет формы этого метода для аргументов функции (ключ, значение), так как не существует соответствующего типа возвращаемого значения.)

<li>Сопоставленные сокращения, которые накапливают результаты данной функции, примененной к каждому элементу.

<ли>уменьшается до скалярных двойных, длинных и инт, используя заданное значение основы.

</ul/ul><>

Эти массовые parallelismThreshold операции принимают аргумент. Методы продолжаются последовательно, если текущий размер карты, по оценкам, меньше заданного порогового значения. Использование значения Long.MAX_VALUE подавляет все параллелизмы. Использование значения 1 результатов максимального параллелизма путем секционирования в достаточно подзадачи, чтобы полностью использовать ForkJoinPool#commonPool() его для всех параллельных вычислений. Как правило, сначала вы выберете одно из этих экстремальных значений, а затем измеряете производительность использования между значениями, которые отключают затраты на пропускную способность и пропускную способность.

Свойства параллелизма массовых операций следуют из значений ConcurrentHashMap: любой ненулевой результат, возвращаемый из get(key) методов доступа, имеет отношение перед соответствующим вставкой или обновлением. Результат любой массовой операции отражает состав этих связей между элементами (но не обязательно атомарный в отношении карты в целом, если он как-то не известен как-то подстановки). И наоборот, поскольку ключи и значения в карте никогда не имеют значения NULL, null служит надежным атомарным индикатором текущего отсутствия какого-либо результата. Для поддержания этого свойства null служит неявной основой для всех не скалярных операций сокращения. Для двойных, длинных и int-версий основой должно быть то, что при сочетании с любым другим значением возвращает это другое значение (более формально это должен быть элемент удостоверения для уменьшения). Большинство распространенных сокращений имеют эти свойства; Например, вычисление суммы с базой 0 или минимумом с базовым MAX_VALUE.

Функции поиска и преобразования, предоставляемые в качестве аргументов, должны аналогично возвращать значение NULL, чтобы указать отсутствие какого-либо результата (в этом случае он не используется). В случае сопоставленных сокращений это также позволяет преобразованиям служить в качестве фильтров, возвращая значение NULL (или, в случае примитивных специализаций, основу идентификации), если элемент не должен быть объединен. Вы можете создавать составные преобразования и фильтры, составив их самостоятельно в рамках этого правила NULL, прежде чем использовать их в операциях поиска или уменьшения.

Методы, принимающие и/или возвращающие аргументы записи, поддерживают связи "ключ-значение". Они могут быть полезны, например при поиске ключа для наибольшего значения. Обратите внимание, что аргументы "обычные" записи можно предоставить с помощью new AbstractMap.SimpleEntry(k,v).

Массовые операции могут завершиться резко, вызывая исключение, обнаруженное в приложении предоставленной функции. Помните, что при обработке таких исключений, которые другие параллельно выполняющие функции также могли вызвать исключения или сделали бы это, если первое исключение не произошло.

Скорость параллельного сравнения с последовательными формами распространена, но не гарантируется. Параллельные операции, связанные с краткими функциями на небольших картах, могут выполняться медленнее, чем последовательные формы, если базовая работа для параллелизации вычислений дороже, чем сама вычисление. Аналогичным образом параллелизация может не привести к значительному фактическому параллелизму, если все процессоры заняты выполнением несвязанных задач.

Все аргументы для всех методов задачи должны быть не null.

Этот класс является членом Платформы коллекций Java.

Добавлено в версии 1.5.

Документация по Java для java.util.concurrent.ConcurrentHashMap.

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

Конструкторы

ConcurrentHashMap()

Создает новую пустую карту с начальным размером таблицы по умолчанию (16).

ConcurrentHashMap(IDictionary)

Создает новую карту с теми же сопоставлениями, что и данная карта.

ConcurrentHashMap(Int32)

Создает новую пустую карту с начальным размером таблицы, который соответствует указанному количеству элементов без динамического изменения размера.

ConcurrentHashMap(Int32, Single)

Создает новую пустую карту с начальным размером таблицы на основе заданного количества элементов (initialCapacity) и начальной плотности таблицы (loadFactor).

ConcurrentHashMap(Int32, Single, Int32)

Создает новую пустую карту с начальным размером таблицы на основе заданного количества элементов (), начальной плотности таблицы (initialCapacityloadFactor) и числа параллельно обновляемых потоков (concurrencyLevel).

ConcurrentHashMap(IntPtr, JniHandleOwnership)

Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения.

Свойства

Class

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
IsEmpty

Добавление

(Унаследовано от AbstractMap)
JniIdentityHashCode

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
JniPeerMembers

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

PeerReference

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

Методы

Clear()

Добавление

(Унаследовано от AbstractMap)
Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
Compute(Object, IBiFunction)

Пытается вычислить сопоставление для указанного ключа и его текущего сопоставленного значения (или null если текущее сопоставление отсутствует).

ComputeIfAbsent(Object, IFunction)

Если указанный ключ еще не связан со значением, пытается вычислить его значение с помощью данной функции сопоставления и ввести его в эту карту, если nullтолько не будет.

ComputeIfPresent(Object, IBiFunction)

Если значение указанного ключа присутствует, пытается вычислить новое сопоставление с заданным ключом и его текущим сопоставленным значением.

Contains(Object)

Проверяет, сопоставляется ли некоторые ключи с указанным значением в этой таблице.

ContainsKey(Object)

Добавление

(Унаследовано от AbstractMap)
ContainsValue(Object)

Добавление

(Унаследовано от AbstractMap)
Dispose()

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
Dispose(Boolean)

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
Elements()

Возвращает перечисление значений в этой таблице.

EntrySet()

Set Возвращает представление сопоставлений, содержащихся на этой карте.

Equals(Object)

Указывает, равен ли другой объект этому объекту.

(Унаследовано от Object)
ForEach(IBiConsumer)

Выполняет заданное действие для каждого (ключа, значения).

ForEach(Int64, IBiConsumer)

Выполняет заданное действие для каждого (ключа, значения).

ForEach(Int64, IBiFunction, IConsumer)

Выполняет заданное действие для каждого преобразования, отличного от NULL, каждого (ключа, значения).

ForEachEntry(Int64, IConsumer)

Выполняет заданное действие для каждой записи.

ForEachEntry(Int64, IFunction, IConsumer)

Выполняет заданное действие для каждого преобразования, отличного от NULL, каждой записи.

ForEachKey(Int64, IConsumer)

Выполняет заданное действие для каждого ключа.

ForEachKey(Int64, IFunction, IConsumer)

Выполняет заданное действие для каждого преобразования, отличного от NULL, каждого ключа.

ForEachValue(Int64, IConsumer)

Выполняет заданное действие для каждого значения.

ForEachValue(Int64, IFunction, IConsumer)

Выполняет заданное действие для каждого преобразования, отличного от NULL, каждого значения.

Get(Object)

Добавление

(Унаследовано от AbstractMap)
GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
GetOrDefault(Object, Object)

Возвращает значение, с которым сопоставляется указанный ключ, или заданное значение по умолчанию, если эта карта не содержит сопоставления для ключа.

JavaFinalize()

Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет.

(Унаследовано от Object)
Keys()

Возвращает перечисление ключей в этой таблице.

KeySet()

Добавление

(Унаследовано от AbstractMap)
MappingCount()

Возвращает количество сопоставлений.

Merge(Object, Object, IBiFunction)

Если указанный ключ еще не связан со значением (не равно NULL), связывает его с заданным значением.

Notify()

Пробуждение одного потока, ожидающего монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Просыпает все потоки, ожидающие монитора этого объекта.

(Унаследовано от Object)
Put(Object, Object)

Добавление

(Унаследовано от AbstractMap)
PutAll(IDictionary)

Добавление

(Унаследовано от AbstractMap)
PutIfAbsent(Object, Object)

Добавление

Reduce(Int64, IBiFunction, IBiFunction)

Возвращает результат аккумулирования заданного преобразования всех пар (key, value) с помощью заданного редуктора для объединения значений или null, если нет.

ReduceEntries(Int64, IBiFunction)

Возвращает результат аккумулирования всех записей с помощью заданного редуктора для объединения значений или null, если нет.

ReduceEntries(Int64, IFunction, IBiFunction)

Возвращает результат аккумулирования заданного преобразования всех записей, использующих заданный редуктор для объединения значений, или значение NULL, если нет.

ReduceEntriesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Возвращает результат накапливания заданного преобразования всех записей с помощью заданного редуктора для объединения значений и заданной основы в качестве значения удостоверения.

ReduceEntriesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Возвращает результат накапливания заданного преобразования всех записей с помощью заданного редуктора для объединения значений и заданной основы в качестве значения удостоверения.

ReduceEntriesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Возвращает результат накапливания заданного преобразования всех записей с помощью заданного редуктора для объединения значений и заданной основы в качестве значения удостоверения.

ReduceKeys(Int64, IBiFunction)

Возвращает результат аккумулирования всех ключей, использующих заданный редуктор для объединения значений, или значение NULL, если нет.

ReduceKeys(Int64, IFunction, IBiFunction)

Возвращает результат аккумулирования заданного преобразования всех ключей, используя заданный редуктор для объединения значений или значение NULL, если нет.

ReduceKeysToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Возвращает результат аккумулирования заданного преобразования всех ключей с помощью заданного редуктора для объединения значений и заданной основы в качестве значения удостоверения.

ReduceKeysToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Возвращает результат аккумулирования заданного преобразования всех ключей с помощью заданного редуктора для объединения значений и заданной основы в качестве значения удостоверения.

ReduceKeysToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Возвращает результат аккумулирования заданного преобразования всех ключей с помощью заданного редуктора для объединения значений и заданной основы в качестве значения удостоверения.

ReduceToDouble(Int64, IToDoubleBiFunction, Double, IDoubleBinaryOperator)

Возвращает результат аккумулирования заданного преобразования всех пар (ключ, значение) с помощью заданного сокращения для объединения значений и заданной основы в качестве значения удостоверения.

ReduceToInt(Int64, IToIntBiFunction, Int32, IIntBinaryOperator)

Возвращает результат аккумулирования заданного преобразования всех пар (ключ, значение) с помощью заданного сокращения для объединения значений и заданной основы в качестве значения удостоверения.

ReduceToLong(Int64, IToLongBiFunction, Int64, ILongBinaryOperator)

Возвращает результат аккумулирования заданного преобразования всех пар (ключ, значение) с помощью заданного сокращения для объединения значений и заданной основы в качестве значения удостоверения.

ReduceValues(Int64, IBiFunction)

Возвращает результат аккумулирования всех значений, использующих заданный редуктор для объединения значений, или значение NULL, если нет.

ReduceValues(Int64, IFunction, IBiFunction)

Возвращает результат аккумулирования заданного преобразования всех значений, использующих заданный редуктор для объединения значений, или значение NULL, если нет.

ReduceValuesToDouble(Int64, IToDoubleFunction, Double, IDoubleBinaryOperator)

Возвращает результат аккумулирования заданного преобразования всех значений, использующих заданный редуктор для объединения значений, и заданной основы в качестве значения удостоверения.

ReduceValuesToInt(Int64, IToIntFunction, Int32, IIntBinaryOperator)

Возвращает результат аккумулирования заданного преобразования всех значений, использующих заданный редуктор для объединения значений, и заданной основы в качестве значения удостоверения.

ReduceValuesToLong(Int64, IToLongFunction, Int64, ILongBinaryOperator)

Возвращает результат аккумулирования заданного преобразования всех значений, использующих заданный редуктор для объединения значений, и заданной основы в качестве значения удостоверения.

Remove(Object)

Добавление

(Унаследовано от AbstractMap)
Remove(Object, Object)

Добавление

Replace(Object, Object)

Добавление

Replace(Object, Object, Object)

Добавление

ReplaceAll(IBiFunction)

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

Search(Int64, IBiFunction)

Возвращает результат, отличный от NULL, из применения заданной функции поиска для каждого (ключа, значения) или null, если нет.

SearchEntries(Int64, IFunction)

Возвращает ненулевой результат применения заданной функции поиска для каждой записи или null, если нет.

SearchKeys(Int64, IFunction)

Возвращает результат, отличный от NULL, от применения заданной функции поиска к каждому ключу или null, если нет.

SearchValues(Int64, IFunction)

Возвращает результат, отличный от NULL, от применения заданной функции поиска к каждому значению или значению null, если нет.

SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
Size()

Добавление

(Унаследовано от AbstractMap)
ToArray<T>()

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
Values()

Добавление

(Унаследовано от AbstractMap)
Wait()

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>помощи уведомления</em> или <эм>прерванного</em>.

(Унаследовано от Object)
Wait(Int64)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)
Wait(Int64, Int32)

Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени.

(Унаследовано от Object)

Явные реализации интерфейса

IJavaPeerable.Disposed()

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
IJavaPeerable.DisposeUnlessReferenced()

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
IJavaPeerable.Finalized()

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
IJavaPeerable.JniManagedPeerState

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

(Унаследовано от Object)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

GetJniTypeName(IJavaPeerable)

Хэш-таблица, поддерживающая полный параллелизм повторных вычислений и высокий ожидаемый параллелизм для обновлений.

Применяется к