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
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()从此映射中删除所有映射。clone()返回此枚举映射的浅拷贝。booleancontainsKey(Object key) 如果此映射包含指定键的映射,则返回true。booleancontainsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回true。entrySet()返回此映射中包含的映射的Set视图。boolean将指定对象与此映射进行比较以检查相等性。返回指定键映射到的值,如果此映射不包含键的映射,则返回null。inthashCode()返回此映射的哈希码值。keySet()返回此映射中包含的键的Set视图。在此映射中将指定键与指定值关联。void从指定映射复制所有映射到此映射。如果存在,则从此映射中删除此键的映射。intsize()返回此映射中键-值映射的数量。values()返回此映射中包含的值的Collection视图。Methods declared in class java.util.AbstractMap
isEmpty, toStringMethods 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
返回此枚举映射的浅拷贝。值本身不会被克隆。
-