Java ConcurrentHashMap类

2024 年 12 月 16 日 | 阅读 5 分钟

一个支持检索完全并发和更新高预期并发的哈希表。此类遵循与Hashtable相同的函数规范,并包含与Hashtable的每个方法相对应的版本。但是,尽管所有操作都是线程安全的,但检索操作不涉及锁定,并且没有锁定整个表的机制来阻止所有访问。此类在依赖其线程安全但非其同步细节的程序中与Hashtable完全可互操作。

Java ConcurrentHashMap类声明

ConcurrentHashMap类方法列表

方法描述
1.public void clear()ConcurrentHashMap类的clear()方法会移除此映射中的所有映射关系。
2.public V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)ConcurrentHashMap类的compute()方法会尝试为指定的键及其当前映射值(如果当前没有映射,则为null)计算一个映射关系。
3.public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)ConcurrentHashMap类的computeIfAbsent()方法会尝试使用给定的映射函数计算其值,并将其输入到此映射中,除非该值是null。如果指定的键尚未与值关联。
4.public V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)ConcurrentHashMap类的computeIfPresent()方法如果指定键的值存在,则尝试计算给定键及其当前映射值的新映射。
5.public boolean contains(Object value)ConcurrentHashMap类的contains()方法会测试此表中是否有某个键映射到指定的值。
6.public boolean containsKey(Object key)ConcurrentHashMap类的containsKey()方法会测试指定的对象是否是此表中的一个键。
7.public boolean containsValue(Object value)ConcurrentHashMap类的containsValue()方法如果此映射将一个或多个键映射到指定值,则返回true。注意:此方法可能需要对映射进行完整遍历,并且比containsKey方法慢得多。
8.public Enumeration<V> elements()ConcurrentHashMap类的elements()方法返回此表中值的枚举。
9.public Set<Map.Entry<K,V>> entrySet()ConcurrentHashMap类的entrySet()方法返回此映射中包含的映射的Set视图。对映射的更改会反映在Set中,反之亦然。
10.public boolean equals(Object o)ConcurrentHashMap类的elements()方法将指定的对象与此映射进行相等性比较,如果给定对象是一个与此映射具有相同映射关系的映射,则返回true。
11.public V get(Object key)ConcurrentHashMap类的get()方法返回指定键映射到的值,如果此映射不包含指定键的映射,则返回null。
12.public V getOrDefault(Object key, V defaultValue)ConcurrentHashMap类的getOrDefault()方法返回指定键映射到的值,如果此映射不包含指定键的映射,则返回给定的默认值。
13.public int hashCode()ConcurrentHashMap类的hashcode()方法返回此Map的哈希码值,即映射中每个键值对的key.hashCode() ^ value.hashCode()之和。
14.public Enumeration<K> keys()ConcurrentHashMap类的keys()方法返回此表中键的枚举。
15.public ConcurrentHashMap.KeySetView<K,V> keySet()
public ConcurrentHashMap.KeySetView<K,V> keySet(V mappedValue)
ConcurrentHashMap类的keySet()方法返回此映射中包含的键的Set视图。Set由映射支持,因此对映射的更改会反映在Set中,反之亦然。
16.public long mappingCount()ConcurrentHashMap类的mappingCount()方法返回映射的数量。返回的值是估计值;如果存在并发插入或删除,则实际计数可能有所不同。
17.public V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)ConcurrentHashMap类的merge()方法如果指定的键尚未与(非null)值关联,则将其与给定的值关联。
18.public static <K> ConcurrentHashMap.KeySetView<K,Boolean> newKeySet()
public static <K> ConcurrentHashMap.KeySetView<K,Boolean> newKeySet(int initialCapacity)
ConcurrentHashMap类的newKeySet()方法从给定的类型创建由ConcurrentHashMap支持的新Set,其值为Boolean.TRUE。
19.public V put(K key, V value)ConcurrentHashMap类的put()方法将指定的键映射到此表中的指定值。
20.public void putAll(Map<? extends K,? extends V> m)ConcurrentHashMap类的putAll()方法将指定映射中的所有映射复制到此映射中。这些映射会替换此映射当前拥有的任何当前指定映射的键。
21.public V putIfAbsent(K key, V value)ConcurrentHashMap类的putIfAbsent()方法如果指定的键尚未与值关联,则将其与给定的值关联。这等同于,对于此映射。
22.public V remove(Object key)
public boolean remove(Object key, Object value)
ConcurrentHashMap类的remove()方法会从此映射中移除键(及其对应的映射值)。如果键不在映射中,此方法不执行任何操作。
23.public V replace(K key, V value)
public boolean replace(K key, V oldValue, V newValue)
ConcurrentHashMap类的replace()方法仅当条目当前映射到某个值时,才会替换该键的条目。这等同于,对于此映射。
24.public String toString()ConcurrentHashMap类的toString()方法返回此映射的字符串表示形式。字符串表示形式包含一个键值映射列表(顺序不固定),用大括号 (“{}”)括起来。
25.public void forEach(long parallelismThreshold, BiConsumer<? super K,? super V> action)
public <U> void forEach(long parallelismThreshold, BiFunction<? super K,? super V,? extends U> transformer, Consumer<? super U> action)
ConcurrentHashMap类的forEach()方法对每个(键,值)执行给定的操作。
26.public Collection<V> values()ConcurrentHashMap类的values()方法返回此映射中包含的值的Collection视图。该映射支持该Collection,因此对映射的更改会反映在Collection中,反之亦然。该Collection支持元素移除,通过Iterator移除映射中对应的映射关系。

Java ConcurrentHashMap类示例:computeIfAbsent()

立即测试

输出

HashMap values :
 {k1=100, k2=200, k3=300, k4=400}
New HashMap after computeIfAbsent :
 {k1=100, k2=200, k3=300, k4=400, k5=500, k6=600}

Java ConcurrentHashMap类示例:containsValue()

立即测试

输出

Mappings are: {AAA=10, CCC=25, BBB=15, EEE=30, DDD=255}
is 255  present? ::  true