Java ConcurrentHashMap 类

ConcurrentHashMap 是一种支持并发检索和高并发更新的哈希表。该类遵循与 Hashtable 相同的功能规范,并包含与 Hashtable 的每个方法对应的版本。尽管所有操作都是线程安全的,但检索操作不需要锁定,并且没有支持以阻止所有访问的方式锁定整个表。这个类在依赖于其线程安全性而不依赖于其同步细节的程序中与 Hashtable 完全互操作。

Java ConcurrentHashMap 类声明

  1. public class ConcurrentHashMap<K, V>
  2. extends AbstractMap<K, V>
  3. 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

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想