Java教程-Java ConcurrentHashMap 类

Java ConcurrentHashMap 类
ConcurrentHashMap
是一种支持并发检索和高并发更新的哈希表。该类遵循与 Hashtable
相同的功能规范,并包含与 Hashtable
的每个方法对应的版本。尽管所有操作都是线程安全的,但检索操作不需要锁定,并且没有支持以阻止所有访问的方式锁定整个表。这个类在依赖于其线程安全性而不依赖于其同步细节的程序中与 Hashtable
完全互操作。
Java ConcurrentHashMap 类声明
public class ConcurrentHashMap<K, V>
extends AbstractMap<K, V>
implements ConcurrentMap<K, V>, Serializable
ConcurrentHashMap 类的方法列表
序号 | 方法 | 描述 |
---|---|---|
1. | public void clear() | clear() 方法从此映射中删除所有映射关系。 |
2. | public V compute(K key, BiFunction remappingFunction) | compute() 方法尝试计算指定键的映射及其当前映射值(如果没有当前映射值,则为 null)。 |
3. | public V computeIfAbsent(K key, Function mappingFunction) | computeIfAbsent() 方法尝试使用给定的映射函数计算其值,并将其输入到此映射中,除非指定的键已经与值关联为 null。 |
4. | public V computeIfPresent(K key, BiFunction remappingFunction) | computeIfPresent() 方法尝试计算给定键的新映射,如果指定键的值存在。 |
5. | public boolean contains(Object value) | contains() 方法测试指定值是否在此表中映射到某个键。 |
6. | public boolean containsKey(Object key) | containsKey() 方法测试指定对象是否为此表中的键。 |
7. | public boolean containsValue(Object value) | containsValue() 方法如果此映射将一个或多个键映射到指定值,则返回 true。注意:该方法可能需要完全遍历映射,并且比 containsKey 方法慢得多。 |
8. | public Enumeration<V> elements() | elements() 方法返回此表中值的枚举。 |
9. | public Set<Map.Entry<K, V>> entrySet() | entrySet() 方法返回此映射中包含的映射的 Set 视图。对映射所做的更改将反映在 Set 中,反之亦然。 |
10. | public boolean equals(Object o) | equals() 方法将指定的对象与此映射进行比较,如果给定对象是具有与此映射相同映射的映射,则返回 true。 |
11. | public V get(Object key) | get() 方法返回指定键映射到的值,如果此映射不包含该键的映射,则返回 null。 |
12. | public V getOrDefault(Object key, V defaultValue) | getOrDefault() 方法返回指定键映射到的值,如果此映射不包含该键的映射,则返回给定的默认值。 |
13. | public int hashCode() | hashCode() 方法返回此映射的哈希码值,即该映射中每个键值对的 key.hashCode() ^ value.hashCode() 的总和。 |
14. | public Enumeration<K> keys() | keys() 方法返回此表中键的枚举。 |
15. | public ConcurrentHashMap.KeySetView<K, V> keySet() | public ConcurrentHashMap.KeySetView<K, V> keySet(V mappedValue) |
16. | public long mappingCount() | mappingCount() 方法返回映射的数量。返回的值是一个估计值;如果存在并发的插入或删除操作,则实际计数可能有所不同。 |
17. | public V merge(K key, V value, BiFunction remappingFunction) | merge() 方法将指定键(如果尚未与非空值关联)关联到给定值。 |
18. | public static <K> ConcurrentHashMap.KeySetView<K, Boolean> newKeySet() | public static <K> ConcurrentHashMap.KeySetView<K, Boolean> newKeySet(int initialCapacity) |
19. | public V put(K key, V value) | put() 方法将指定的键映射到指定的值。 |
20. | public void putAll(Map<? extends K, ? extends V> m) | putAll() 方法将指定映射中的所有映射复制到此映射。这些映射替换当前在指定映射中存在的任何键的映射。 |
21. | public V putIfAbsent(K key, V value) | putIfAbsent() 方法将指定的键与给定的值关联,如果该键尚未与某个值关联。 |
22. | public V remove(Object key) public boolean remove(Object key, Object value) | remove() 方法从此映射中删除键(及其相应的值)。如果键不在映射中,则此方法不执行任何操作。 |
23. | public V replace(K key, V value) public boolean replace(K key, V oldValue, V newValue) | replace() 方法仅在当前映射到某个值时替换键的条目。 |
24. | public String toString() | 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) | forEach() 方法对每个 (key, value) 执行给定的操作。 |
26. | public Collection<V> values() | values() 方法返回此映射中包含的值的 Collection 视图。映射支持集合,因此映射的更改将反映在集合中,反之亦然。集合支持元素的移除,从映射中移除相应的映射,通过迭代器执行移除操作。 |
Java ConcurrentHashMap 类示例:computeIfAbsent()
下面是使用 computeIfAbsent()
方法的示例代码:
import java.util.concurrent.*;
import java.util.*;
public class ConcurrentHashMapcomputeIfAbsentExample1_1 {
public static void main(String[] args) {
// 创建一个 HashMap 并添加一些值
HashMap<String, Integer> mapcon = new HashMap<>();
mapcon.put("k1", 100);
mapcon.put("k2", 200);
mapcon.put("k3", 300);
mapcon.put("k4", 400);
System.out.println("HashMap values:\n" + mapcon.toString());
mapcon.computeIfAbsent("k5", k -> 200 + 300);
mapcon.computeIfAbsent("k6", k -> 60 * 10);
System.out.println("New HashMap after computeIfAbsent:\n" + mapcon);
}
}
输出:
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()
下面是使用 containsValue()
方法的示例代码:
import java.util.*;
import java.util.concurrent.*;
public class ConcurrentHashMapcontainsValueExample1_1 {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> mymap = new ConcurrentHashMap<String, Integer>();
mymap.put("AAA", 10);
mymap.put("BBB", 15);
mymap.put("CCC", 25);
mymap.put("DDD", 255);
mymap.put("EEE", 30);
System.out.println("Mappings are: " + mymap);
System.out.println("Is 255 present? :: " + mymap.containsValue(255));
}
}
输出:
Mappings are: {AAA=10, CCC=25, BBB=15, EEE=30, DDD=255}
Is 255 present? :: true