|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.util.AbstractMap<K,V> java.util.concurrent.ConcurrentHashMap<K,V>
K
- 此映射维护的键的类型V
- 映射值的类public class ConcurrentHashMap<K,V>
支持检索的完全并发和更新的所期望可调整并发的哈希表。此类遵守与 Hashtable
相同的功能规范,并且包括对应于 Hashtable 的每个方法的方法版本。不过,尽管所有操作都是线程安全的,但检索操作不 必锁定,并且不 支持以某种防止所有访问的方式锁定整个表。此类可以通过程序完全与 Hashtable 进行互操作,这取决于其线程安全,而与其同步细节无关。
检索操作(包括 get)通常不会受阻塞,因此,可能与更新操作交迭(包括 put 和 remove)。检索会影响最近完成的 更新操作的结果。对于一些聚合操作,比如 putAll 和 clear,并发检索可能只影响某些条目的插入和移除。类似地,在创建迭代器/枚举时或自此之后,Iterators 和 Enumerations 返回在某一时间点上影响哈希表状态的元素。它们不会 抛出 ConcurrentModificationException
。不过,迭代器被设计成每次仅由一个线程使用。
这允许通过可选的 concurrencyLevel 构造方法参数(默认值为 16)来引导更新操作之间的并发,该参数用作内部调整大小的一个提示。表是在内部进行分区的,试图允许指示无争用并发更新的数量。因为哈希表中的位置基本上是随意的,所以实际的并发将各不相同。理想情况下,应该选择一个尽可能多地容纳并发修改该表的线程的值。使用一个比所需要的值高很多的值可能会浪费空间和时间,而使用一个显然低很多的值可能导致线程争用。对数量级估计过高或估计过低通常都会带来非常显著的影响。当仅有一个线程将执行修改操作,而其他所有线程都只是执行读取操作时,才认为某个值是合适的。此外,重新调整此类或其他任何种类哈希表的大小都是一个相对较慢的操作,因此,在可能的时候,提供构造方法中期望表大小的估计值是一个好主意。
此类及其视图和迭代器实现了 Map
和 Iterator
接口的所有可选 方法。
此类与 Hashtable
相似,但与 HashMap
不同,它“不”允许将 null 用作键或值。
此类是 Java Collections Framework 的成员。
嵌套类摘要 |
---|
从接口 java.util.Map 继承的嵌套类/接口 |
---|
Map.Entry<K,V> |
构造方法摘要 | |
---|---|
ConcurrentHashMap()
创建一个带有默认初始容量、加载因子和 concurrencyLevel 的新的空映射。 |
|
ConcurrentHashMap(int initialCapacity)
创建一个带有指定初始容量、默认加载因子和 concurrencyLevel 的新的空映射。 |
|
ConcurrentHashMap(int initialCapacity,
float loadFactor,
int concurrencyLevel)
创建一个带有指定初始容量、加载因子和并发级别的新的空映射。 |
|
ConcurrentHashMap(Map<? extends K,? extends V> t)
构造一个与给定映射具有相同映射关系的新映射。 |
方法摘要 | |
---|---|
void |
clear()
从该映射中移除所有映射关系。 |
boolean |
contains(Object value)
一种遗留方法,测试此表中是否有一些与指定值存在映射关系的键。 |
boolean |
containsKey(Object key)
测试指定对象是否为此表中的键。 |
boolean |
containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。 |
Enumeration<V> |
elements()
返回此表中值的枚举。 |
Set<Map.Entry<K,V>> |
entrySet()
返回此映射所包含的映射关系的 collection 视图。 |
V |
get(Object key)
返回此表中指定键所映射到的值。 |
boolean |
isEmpty()
如果此映射不包含任何键-值映射关系,则返回 true。 |
Enumeration<K> |
keys()
返回此表中键的枚举。 |
Set<K> |
keySet()
返回此映射中包含的键的 set 视图。 |
V |
put(K key,
V value)
将指定 key 映射到此表中的指定 value。 |
void |
putAll(Map<? extends K,? extends V> t)
将指定映射中所有映射关系复制到此映射中。 |
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 |
构造方法详细信息 |
---|
public ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
initialCapacity
- 初始容量。该实现执行内部大小调整,以容纳这些元素。loadFactor
- 加载因子阈值,用来控制重新调整大小。在每 bin 中的平均元素数大于此阈值时,可能要重新调整大小。concurrencyLevel
- 当前更新线程的估计数。该实现将执行内部大小调整,以尽量容纳这些线程。
IllegalArgumentException
- 如果初始容量为负,或者加载因子或 concurrencyLevel 为非正。public ConcurrentHashMap(int initialCapacity)
initialCapacity
- 初始容量。该实现执行内部的大小调整,以容纳这些元素。
IllegalArgumentException
- 如果元素的初始容量为负。public ConcurrentHashMap()
public ConcurrentHashMap(Map<? extends K,? extends V> t)
t
- 映射方法详细信息 |
---|
public boolean isEmpty()
AbstractMap
复制的描述此实现返回 size() == 0。
public int size()
AbstractMap
复制的描述此实现返回 entrySet().size()。
public V get(Object key)
key
- 表中的一个键。
NullPointerException
- 如果该键为 null。AbstractMap.containsKey(Object)
public boolean containsKey(Object key)
Map<K,V>
中的 containsKey
AbstractMap<K,V>
中的 containsKey
key
- 可能的键。
NullPointerException
- 如果该键为 null。public boolean containsValue(Object value)
Map<K,V>
中的 containsValue
AbstractMap<K,V>
中的 containsValue
value
- 测试在此映射中是否存在的值。
NullPointerException
- 如果该值为 null。public boolean contains(Object value)
containsValue(java.lang.Object)
,并且它的存在只是为了确保与 Hashtable
类完全兼容,在引入 Java 集合框架之前,该类支持此方法。
value
- 要搜索的值。
NullPointerException
- 如果该值为 null。public V put(K key, V value)
通过使用与原来的键相同的键调用 get 方法,可以检索相应的值。
key
- 表的键。value
- 值。
NullPointerException
- 如果键或值为 null。public V putIfAbsent(K key, V value)
if (!map.containsKey(key)) return map.put(key, value); else return map.get(key);除了原子地执行此操作之外。
ConcurrentMap<K,V>
中的 putIfAbsent
key
- 与指定值相关联的键。value
- 与指定键相关联的值。
NullPointerException
- 如果指定键或值为 null。public void putAll(Map<? extends K,? extends V> t)
t
- 将存储在此映射中的映射关系。public V remove(Object key)
key
- 需要移除的键。
NullPointerException
- 如果该键为 null。public boolean remove(Object key, Object value)
if (map.get(key).equals(value)) { map.remove(key); return true; } else return false;除了原子地执行此操作之外。
ConcurrentMap<K,V>
中的 remove
key
- 与指定值相关联的键。value
- 与指定键相关联的值。
NullPointerException
- 如果指定键为 null。public boolean replace(K key, V oldValue, V newValue)
if (map.get(key).equals(oldValue)) { map.put(key, newValue); return true; } else return false;除了原子地执行此操作之外。
ConcurrentMap<K,V>
中的 replace
key
- 与指定值相关联的键。oldValue
- 期望与指定键相关联的值。newValue
- 与指定键相关联的值。
NullPointerException
- 如果指定键或值为 null。public V replace(K key, V value)
if ((map.containsKey(key)) { return map.put(key, value); } else return null;除了原子地执行此操作之外。
ConcurrentMap<K,V>
中的 replace
key
- 与指定值相关联的键。value
- 与指定键相关联的值。
NullPointerException
- 如果指定键或值为 null。public void clear()
public Set<K> keySet()
ConcurrentModificationException
,并且确保可遍历迭代器构造时存在的元素,此外还可能(但并不保证)反映构造后的所有修改。
public Collection<V> values()
ConcurrentModificationException
,并且确保可遍历迭代器构造时存在的元素,此外还可能(但并不保证)反映构造后的所有修改。
public Set<Map.Entry<K,V>> entrySet()
ConcurrentModificationException
,并且确保可遍历迭代器构造时存在的元素,此外还可能(但并不保证)反映构造后的所有修改。
public Enumeration<K> keys()
keySet
public Enumeration<V> elements()
values
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。