Module java.base
Package java.util

Class EnumMap<K extends Enum<K>,V>

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
参见:
  • Constructor Details

    • EnumMap

      public EnumMap(Class<K> keyType)
      使用指定的键类型创建一个空枚举映射。
      参数:
      keyType - 此枚举映射的键类型的类对象
      抛出:
      NullPointerException - 如果keyType为null
    • EnumMap

      public EnumMap(EnumMap<K,? extends V> m)
      创建一个具有与指定枚举映射相同键类型的枚举映射,最初包含相同的映射(如果有)。
      参数:
      m - 用于初始化此枚举映射的枚举映射
      抛出:
      NullPointerException - 如果m为null
    • EnumMap

      public EnumMap(Map<K,? extends V> m)
      从指定映射初始化一个枚举映射。如果指定的映射是一个EnumMap实例,则此构造函数的行为与EnumMap(EnumMap)相同。否则,指定的映射必须至少包含一个映射(以确定新枚举映射的键类型)。
      参数:
      m - 用于初始化此枚举映射的映射
      抛出:
      IllegalArgumentException - 如果m不是EnumMap实例并且不包含任何映射
      NullPointerException - 如果m为null
  • Method Details

    • size

      public int size()
      返回此映射中键-值映射的数量。
      指定者:
      size 在接口 Map<K extends Enum<K>,V>
      覆盖:
      size 在类 AbstractMap<K extends Enum<K>,V>
      返回:
      此映射中键-值映射的数量
    • containsValue

      public boolean containsValue(Object value)
      如果此映射将一个或多个键映射到指定值,则返回true
      指定者:
      containsValue 在接口 Map<K extends Enum<K>,V>
      覆盖:
      containsValue 在类 AbstractMap<K extends Enum<K>,V>
      参数:
      value - 要测试其在此映射中存在性的值
      返回:
      如果此映射将一个或多个键映射到此值,则返回true
    • containsKey

      public boolean containsKey(Object key)
      如果此映射包含指定键的映射,则返回true
      指定者:
      containsKey 在接口 Map<K extends Enum<K>,V>
      覆盖:
      containsKey 在类 AbstractMap<K extends Enum<K>,V>
      参数:
      key - 要测试其在此映射中存在性的键
      返回:
      如果此映射包含指定键的映射,则返回true
    • get

      public V get(Object key)
      返回指定键映射到的值,如果此映射不包含键的映射,则返回null

      更正式地说,如果此映射包含从键k到值v的映射,使得(key == k),则此方法返回v;否则返回null。(最多只能有一个这样的映射。)

      返回null的值不一定表示映射不包含键的映射;也可能是映射明确将键映射到null。可以使用containsKey操作来区分这两种情况。

      指定由:
      get 在接口 Map<K extends Enum<K>,V>
      覆盖:
      get 在类 AbstractMap<K extends Enum<K>,V>
      参数:
      key - 要返回其关联值的键
      返回:
      指定键映射到的值,如果此映射不包含键的映射,则返回null
    • put

      public V put(K key, V value)
      在此映射中将指定值与指定键关联。如果映射先前包含此键的映射,则将替换旧值。
      指定由:
      put 在接口 Map<K extends Enum<K>,V>
      覆盖:
      put 在类 AbstractMap<K extends Enum<K>,V>
      参数:
      key - 要将指定值关联的键
      value - 要与指定键关联的值
      返回:
      与指定键关联的先前值,如果键没有映射,则返回null。(null返回还可以表示映射先前将null与指定键关联。)
      抛出:
      NullPointerException - 如果指定的键为null
    • remove

      public V remove(Object key)
      如果存在,从此映射中删除此键的映射。
      指定由:
      remove 在接口 Map<K extends Enum<K>,V>
      覆盖:
      remove 在类 AbstractMap<K extends Enum<K>,V>
      参数:
      key - 要从映射中删除其映射的键
      返回:
      与指定键关联的先前值,如果没有键的条目,则返回null。(null返回还可以表示映射先前将null与指定键关联。)
    • putAll

      public void putAll(Map<? extends K,? extends V> m)
      将指定映射中的所有映射复制到此映射。这些映射将替换此映射当前具有的任何键的映射。
      指定由:
      putAll 在接口 Map<K extends Enum<K>,V>
      覆盖:
      putAll 在类 AbstractMap<K extends Enum<K>,V>
      参数:
      m - 要存储在此映射中的映射
      抛出:
      NullPointerException - 指定的映射为null,或者指定映射中的一个或多个键为null
    • clear

      public void clear()
      从此映射中删除所有映射。
      指定由:
      clear 在接口 Map<K extends Enum<K>,V>
      覆盖:
      clear 在类 AbstractMap<K extends Enum<K>,V>
    • keySet

      public Set<K> keySet()
      返回此映射中包含的键的Set视图。返回的集合遵守Map.keySet()中概述的一般契约。集合的迭代器将以它们的自然顺序(枚举常量声明的顺序)返回键。
      指定由:
      keySet 在接口 Map<K extends Enum<K>,V>
      覆盖:
      keySet 在类 AbstractMap<K extends Enum<K>,V>
      返回:
      包含在此枚举映射中的键的集合视图
    • values

      public Collection<V> values()
      返回此映射中包含的值的Collection视图。返回的集合遵守Map.values()中概述的一般契约。集合的迭代器将按照它们对应键在映射中出现的顺序返回值,这是它们的自然顺序(枚举常量声明的顺序)。
      指定由:
      values 在接口 Map<K extends Enum<K>,V>
      覆盖:
      values 在类 AbstractMap<K extends Enum<K>,V>
      返回:
      包含在此映射中的值的集合视图
    • entrySet

      public Set<Map.Entry<K,V>> entrySet()
      返回此映射中包含的映射的Set视图。返回的集合遵守Map.keySet()中概述的一般契约。集合的迭代器将按照它们的键在映射中出现的顺序返回映射,这是它们的自然顺序(枚举常量声明的顺序)。
      指定由:
      entrySet 在接口 Map<K extends Enum<K>,V>
      返回:
      包含在此枚举映射中的映射的集合视图
    • equals

      public boolean equals(Object o)
      将指定对象与此映射进行比较以确定是否相等。如果给定对象也是一个映射,并且两个映射表示相同的映射,如Map.equals(Object)合同中指定的那样,则返回true
      指定者:
      equals 在接口 Map<K extends Enum<K>,V>
      覆盖:
      equals 在类 AbstractMap<K extends Enum<K>,V>
      参数:
      o - 用于与此映射进行比较的对象
      返回值:
      如果指定的对象等于此映射,则返回true
      参见:
    • hashCode

      public int hashCode()
      返回此映射的哈希码值。映射的哈希码被定义为映射中每个条目的哈希码之和。
      指定者:
      hashCode 在接口 Map<K extends Enum<K>,V>
      覆盖:
      hashCode 在类 AbstractMap<K extends Enum<K>,V>
      返回值:
      此映射的哈希码值
      参见:
    • clone

      public EnumMap<K,V> clone()
      返回此枚举映射的浅拷贝。值本身不会被克隆。
      覆盖:
      clone 在类 AbstractMap<K extends Enum<K>,V>
      返回值:
      此枚举映射的浅拷贝
      参见: