public class EnumMap<K extends Enum<K>,V> extends AbstractMap<K,V> implements Serializable, Cloneable
Map
实现与枚举类型键一起使用。
枚举映射中的所有密钥必须来自创建映射时明确或隐式指定的单个枚举类型。
枚举地图在内部表示为数组。
这种表示非常紧凑和高效。
枚举映射以其键的自然顺序 (枚举枚举常数被声明的顺序)维护。 这反映在由所述集合的视图(返回的迭代keySet()
, entrySet()
和values()
)。
由集合视图返回的迭代器弱一致 :它们不会抛出ConcurrentModificationException
,并且它们可能显示或可能不显示在迭代进行时发生的映射的任何修改的影响。
不允许使用空键。 尝试插入空键将丢失NullPointerException
。 然而,尝试测试是否存在空键或删除一个将会正常工作。 允许空值。
像大多数集合实现一样, EnumMap不同步。 如果多个线程同时访问枚举映射,并且至少有一个线程修改映射,则应该在外部进行同步。 这通常通过在自然地封装枚举映射的某些对象上进行同步来实现。 如果没有此类对象存在,则应使用Collections.synchronizedMap(java.util.Map<K, V>)
方法“包装”地图。 这最好在创建时完成,以防止意外的不同步访问:
Map<EnumKey, V> m
= Collections.synchronizedMap(new EnumMap<EnumKey, V>(...));
实现注意事项:所有基本操作都在不间断的时间内执行。 他们可能(虽然不能保证)比他们的HashMap
同行更快。
EnumSet
, Serialized Form
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
Constructor and Description |
---|
EnumMap(类<K> keyType)
使用指定的键类型创建一个空的枚举映射。
|
EnumMap(EnumMap<K,? extends V> m)
创建与指定的枚举映射相同的键类型的枚举映射,最初包含相同的映射(如果有)。
|
EnumMap(Map<K,? extends V> m)
创建从指定地图初始化的枚举映射。
|
Modifier and Type | Method and Description |
---|---|
void |
clear()
从此地图中删除所有的映射。
|
EnumMap<K,V> |
clone()
返回此枚举映射的浅拷贝。
|
boolean |
containsKey(Object key)
如果此映射包含指定键的映射,则返回
true 。
|
boolean |
containsValue(Object value)
如果此映射将一个或多个键映射到指定的值,则返回
true 。
|
Set<Map.Entry<K,V>> |
entrySet()
返回此地图中包含的映射的 Set 视图。
|
boolean |
equals(Object o)
将指定的对象与此映射进行比较以获得相等性。
|
V |
get(Object key)
返回到指定键所映射的值,或
null 如果此映射包含该键的映射。
|
int |
hashCode()
返回此地图的哈希码值。
|
Set<K> |
keySet()
返回此地图中包含的键的 Set 视图。
|
V |
put(K key, V value)
将指定的值与此映射中的指定键相关联。
|
void |
putAll(Map<? extends K,? extends V> m)
将指定地图的所有映射复制到此地图。
|
V |
remove(Object key)
从该地图中删除此密钥的映射(如果存在)。
|
int |
size()
返回此地图中键值映射的数量。
|
Collection<V> |
values()
返回此地图中包含的值的 Collection 视图。
|
isEmpty, toString
finalize, getClass, notify, notifyAll, wait, wait, wait
compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll
public EnumMap(类<K> keyType)
keyType
- 此枚举映射的键类型的类对象
NullPointerException
- 如果
keyType为空
public EnumMap(EnumMap<K,? extends V> m)
m
- 从中初始化此枚举映射的枚举映射
NullPointerException
- 如果
m为空
public EnumMap(Map<K,? extends V> m)
EnumMap(EnumMap)
相同 。
否则,指定的映射必须至少包含一个映射(以确定新的枚举映射的密钥类型)。
m
- 从中初始化此枚举地图的地图
IllegalArgumentException
- 如果
m不是
EnumMap实例,并且不包含映射
NullPointerException
- 如果
m为空
public int size()
public boolean containsValue(Object value)
containsValue
在界面
Map<K extends Enum<K>,V>
containsValue
在类别
AbstractMap<K extends Enum<K>,V>
value
- 要在此地图中存在的值将被测试
public boolean containsKey(Object key)
containsKey
在界面
Map<K extends Enum<K>,V>
containsKey
在
AbstractMap<K extends Enum<K>,V>
key
- 要在此地图中存在的密钥要进行测试
public V get(Object key)
null
如果此映射包含该键的映射。
更正式地说,如果这个地图包含从一个键k
到一个值v
,这样(key == k)
,那么这个方法返回v
; 否则返回null
。 (最多可以有一个这样的映射。)
返回值null
并不一定表示该映射不包含该键的映射; 地图也可能明确地将密钥映射到null
。 可以使用containsKey
操作来区分这两种情况。
public void putAll(Map<? extends K,? extends V> m)
public void clear()
public Collection<V> values()
Collection
视图。
返回的集合遵守中描述的一般合同Map.values()
。
集合的迭代器将按照它们对应的键在map中显示的顺序返回值,这是它们的自然顺序(枚举常量被声明的顺序)。
public boolean equals(Object o)
Map.equals(Object)
合同中规定的相同的映射。
public int hashCode()
hashCode
在界面
Map<K extends Enum<K>,V>
hashCode
在类别
AbstractMap<K extends Enum<K>,V>
Map.Entry.hashCode()
,
Object.equals(Object)
,
Set.equals(Object)