ConcurrentHashMap——高性能HashMap。

父类

AbstractMap<K,V>

实现接口

ConcurrentMap<K,V>, Serializable

说明

支持获取的完全并发和更新的所期望可调整并发的哈希表。此类遵守与 Hashtable 相同的功能规范,并且包括对应于 Hashtable 的每个方法的方法版本。不过,尽管所有操作都是线程安全的,但获取操作 必锁定,并且 支持以某种防止所有访问的方式锁定整个表。此类可以通过程序完全与 Hashtable 进行互操作,这取决于其线程安全,而与其同步细节无关。

获取操作(包括 get)通常不会受阻塞,因此,可能与更新操作交迭(包括 putremove)。获取会影响最近完成的 更新操作的结果。对于一些聚合操作,比如 putAllclear,并发获取可能只影响某些条目的插入和移除。类似地,在创建迭代器/枚举时或自此之后,Iterators 和 Enumerations 返回在某一时间点上影响哈希表状态的元素。它们不会 抛出 ConcurrentModificationException。不过,迭代器被设计成每次仅由一个线程使用。

这允许通过可选的 concurrencyLevel 构造方法参数(默认值为 16)来引导更新操作之间的并发,该参数用作内部调整大小的一个提示。表是在内部进行分区的,试图允许指示无争用并发更新的数量。因为哈希表中的位置基本上是随意的,所以实际的并发将各不相同。理想情况下,应该选择一个尽可能多地容纳并发修改该表的线程的值。使用一个比所需要的值高很多的值可能会浪费空间和时间,而使用一个显然低很多的值可能导致线程争用。对数量级估计过高或估计过低通常都会带来非常显著的影响。当仅有一个线程将执行修改操作,而其他所有线程都只是执行读取操作时,才认为某个值是合适的。此外,重新调整此类或其他任何种类哈希表的大小都是一个相对较慢的操作,因此,在可能的时候,提供构造方法中期望表大小的估计值是一个好主意。

此类及其视图和迭代器实现了 MapIterator 接口的所有可选 方法。

此类与 Hashtable 相似,但与 HashMap 不同,它 允许将 null 用作键或值。

此类是 Java Collections Framework 的成员。

构造方法

ConcurrentHashMap()
          创建一个带有默认初始容量 (16)、加载因子 (0.75) 和 concurrencyLevel (16) 的新的空映射。
ConcurrentHashMap(int initialCapacity)
          创建一个带有指定初始容量、默认加载因子 (0.75) 和 concurrencyLevel (16) 的新的空映射。
ConcurrentHashMap(int initialCapacity, float loadFactor)
          创建一个带有指定初始容量、加载因子和默认 concurrencyLevel (16) 的新的空映射。
ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
          创建一个带有指定初始容量、加载因子和并发级别的新的空映射。
ConcurrentHashMap(Map<? extends K,? extends V> m)
          构造一个与给定映射具有相同映射关系的新映射。

方法

 void clear()
          从该映射中移除所有映射关系
 boolean contains(Object value)
          一种遗留方法,测试此表中是否有一些与指定值存在映射关系的键。
 boolean containsKey(Object key)
          测试指定对象是否为此表中的键。
 boolean containsValue(Object value)
          如果此映射将一个或多个键映射到指定值,则返回 true
 Enumeration<V> elements()
          返回此表中值的枚举。
 Set<Map.Entry<K,V>> entrySet()
          返回此映射所包含的映射关系的 Set 视图。
 V get(Object key)
          返回指定键所映射到的值,如果此映射不包含该键的映射关系,则返回 null
 boolean isEmpty()
          如果此映射不包含键-值映射关系,则返回 true
 Enumeration<K> keys()
          返回此表中键的枚举。
 Set<K> keySet()
          返回此映射中包含的键的 Set 视图。
 V put(K key, V value)
          将指定键映射到此表中的指定值。
 void putAll(Map<? extends K,? extends V> m)
          将指定映射中所有映射关系复制到此映射中。
 V putIfAbsent(K key, V value)
          如果指定键已经不再与某个值相关联,则将它与给定值关联。
 V remove(Object key)
          从此映射中移除键(及其相应的值)。
 boolean remove(Object key, Object value)
          只有目前将键的条目映射到给定值时,才移除该键的条目。
 V replace(K key, V value)
          只有目前将键的条目映射到某一值时,才替换该键的条目。
 boolean replace(K key, V oldValue, V newValue)
          只有目前将键的条目映射到给定值时,才替换该键的条目。
 int size()
          返回此映射中的键-值映射关系数。
 Collection<V> values()
          返回此映射中包含的值的 Collection 视图。

从父类继承的方法

从类 java.util.AbstractMap 继承的方法
clone, equals, hashCode, toString
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
从接口 java.util.Map 继承的方法
equals, hashCode

猜你喜欢

转载自blog.csdn.net/en_joker/article/details/80810457
今日推荐