java.lang.Object
java.util.AbstractMap<K,V>
java.util.EnumMap<K,V>
- 类型参数:
-
K
- 此映射维护的键的枚举类型 -
V
- 映射值的类型
- 所有实现的接口:
-
Serializable
,Cloneable
,Map<K,
V>
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
对应物更快。
此类是Java集合框架的成员。
- 自 JDK 版本:
- 1.5
- 参见:
-
Nested Class Summary
Nested classes/interfaces declared in class java.util.AbstractMap
AbstractMap.SimpleEntry<K,
V>, AbstractMap.SimpleImmutableEntry<K, V> -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
从此映射中删除所有映射。clone()
返回此枚举映射的浅拷贝。boolean
containsKey
(Object key) 如果此映射包含指定键的映射,则返回true
。boolean
containsValue
(Object value) 如果此映射将一个或多个键映射到指定值,则返回true
。entrySet()
返回此映射中包含的映射的Set
视图。boolean
将指定对象与此映射进行比较以检查相等性。返回指定键映射到的值,如果此映射不包含键的映射,则返回null
。int
hashCode()
返回此映射的哈希码值。keySet()
返回此映射中包含的键的Set
视图。在此映射中将指定键与指定值关联。void
从指定映射复制所有映射到此映射。如果存在,则从此映射中删除此键的映射。int
size()
返回此映射中键-值映射的数量。values()
返回此映射中包含的值的Collection
视图。Methods declared in class java.util.AbstractMap
isEmpty, toString
Methods declared in interface java.util.Map
compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll
-
Constructor Details
-
EnumMap
使用指定的键类型创建一个空枚举映射。- 参数:
-
keyType
- 此枚举映射的键类型的类对象 - 抛出:
-
NullPointerException
- 如果keyType
为null
-
EnumMap
创建一个具有与指定枚举映射相同键类型的枚举映射,最初包含相同的映射(如果有)。- 参数:
-
m
- 用于初始化此枚举映射的枚举映射 - 抛出:
-
NullPointerException
- 如果m
为null
-
EnumMap
从指定映射初始化一个枚举映射。如果指定的映射是一个EnumMap
实例,则此构造函数的行为与EnumMap(EnumMap)
相同。否则,指定的映射必须至少包含一个映射(以确定新枚举映射的键类型)。- 参数:
-
m
- 用于初始化此枚举映射的映射 - 抛出:
-
IllegalArgumentException
- 如果m
不是EnumMap
实例并且不包含任何映射 -
NullPointerException
- 如果m
为null
-
-
Method Details
-
size
public int size()返回此映射中键-值映射的数量。 -
containsValue
如果此映射将一个或多个键映射到指定值,则返回true
。- 指定者:
-
containsValue
在接口Map<K extends Enum<K>,
中V> - 覆盖:
-
containsValue
在类AbstractMap<K extends Enum<K>,
中V> - 参数:
-
value
- 要测试其在此映射中存在性的值 - 返回:
-
如果此映射将一个或多个键映射到此值,则返回
true
-
containsKey
如果此映射包含指定键的映射,则返回true
。- 指定者:
-
containsKey
在接口Map<K extends Enum<K>,
中V> - 覆盖:
-
containsKey
在类AbstractMap<K extends Enum<K>,
中V> - 参数:
-
key
- 要测试其在此映射中存在性的键 - 返回:
-
如果此映射包含指定键的映射,则返回
true
-
get
返回指定键映射到的值,如果此映射不包含键的映射,则返回null
。更正式地说,如果此映射包含从键
k
到值v
的映射,使得(key == k)
,则此方法返回v
;否则返回null
。(最多只能有一个这样的映射。)返回
null
的值不一定表示映射不包含键的映射;也可能是映射明确将键映射到null
。可以使用containsKey
操作来区分这两种情况。 -
put
在此映射中将指定值与指定键关联。如果映射先前包含此键的映射,则将替换旧值。 -
remove
如果存在,从此映射中删除此键的映射。 -
putAll
将指定映射中的所有映射复制到此映射。这些映射将替换此映射当前具有的任何键的映射。 -
clear
public void clear()从此映射中删除所有映射。 -
keySet
返回此映射中包含的键的Set
视图。返回的集合遵守Map.keySet()
中概述的一般契约。集合的迭代器将以它们的自然顺序(枚举常量声明的顺序)返回键。 -
values
返回此映射中包含的值的Collection
视图。返回的集合遵守Map.values()
中概述的一般契约。集合的迭代器将按照它们对应键在映射中出现的顺序返回值,这是它们的自然顺序(枚举常量声明的顺序)。 -
entrySet
返回此映射中包含的映射的Set
视图。返回的集合遵守Map.keySet()
中概述的一般契约。集合的迭代器将按照它们的键在映射中出现的顺序返回映射,这是它们的自然顺序(枚举常量声明的顺序)。 -
equals
将指定对象与此映射进行比较以确定是否相等。如果给定对象也是一个映射,并且两个映射表示相同的映射,如Map.equals(Object)
合同中指定的那样,则返回true
。 -
hashCode
public int hashCode()返回此映射的哈希码值。映射的哈希码被定义为映射中每个条目的哈希码之和。 -
clone
返回此枚举映射的浅拷贝。值本身不会被克隆。
-