模块 java.base
 java.util

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

java.lang.Object
java.util.AbstractMap <K,V>
java.util.EnumMap<K,V>
类型参数:
K - 此map维护的键的枚举类型
V - 映射值的类型
所有已实现的接口:
Serializable , Cloneable , Map<K,V>

public class EnumMap<K extends Enum <K>,V> extends AbstractMap <K,V> implements Serializable , Cloneable
用于枚举类型键的专用 Map 实现。枚举map中的所有键必须来自创建map时显式或隐式指定的单个枚举类型。枚举map在内部表示为数组。这种表示非常紧凑和高效。

枚举map保存在自然秩序它们的键(声明枚举常量的顺序)。这反映在集合视图(keySet() entrySet() values() )返回的迭代器中。

集合视图返回的迭代器是弱一致:他们永远不会抛出 ConcurrentModificationException 并且他们可能会或可能不会显示在迭代过程中对map进行的任何修改的影响。

不允许使用空键。尝试插入空键将抛出 NullPointerException 。然而,尝试测试是否存在空键或删除空键将正常运行。允许空值。

像大多数集合实现一样,EnumMap 是不同步的。如果多个线程同时访问一个枚举map,并且至少有一个线程修改了map,则应该在外部进行同步。这通常是通过同步一些自然封装枚举map的对象来实现的。如果不存在这样的对象,则应使用 Collections.synchronizedMap(java.util.Map<K, V>) 方法“包装”map。这最好在创建时完成,以防止意外的不同步访问:

   Map<EnumKey, V> m
     = Collections.synchronizedMap(new EnumMap<EnumKey, V>(...));
 

实施注意事项:所有基本操作都在恒定时间内执行。它们很可能(尽管不能保证)比它们的 HashMap 对应物更快。

此类是 Java 集合框架 的成员。

自从:
1.5
参见:
  • 构造方法详细信息

    • EnumMap

      public EnumMap(Class <K > keyType)
      创建具有指定键类型的空枚举map。
      参数:
      keyType - 此枚举map的键类型的类对象
      抛出:
      NullPointerException - 如果 keyType 为空
    • EnumMap

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

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

    • size

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

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

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

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

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

      null 的返回值不一定指示映射不包含键的映射;map也可能将密钥显式映射到 nullcontainsKey 操作可用于区分这两种情况。

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

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

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

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

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

      public Set <K > keySet()
      返回此map中包含的键的 Set 视图。返回的集合遵守 Map.keySet() 中概述的一般合同。该集合的迭代器将按自然顺序(枚举常量声明的顺序)返回键。
      指定者:
      keySet 在接口 Map<K extends Enum<K>,V>
      重写:
      keySet 在类 AbstractMap<K extends Enum<K>,V>
      返回:
      此枚举map中包含的键的集合视图
    • values

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

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

      public boolean equals(Object  o)
      比较指定对象与此map是否相等。如果给定对象也是一个映射并且两个映射表示相同的映射,则返回 true,如 Map.equals(Object) 契约中所指定。
      指定者:
      equals 在接口 Map<K extends Enum<K>,V>
      重写:
      equals 在类 AbstractMap<K extends Enum<K>,V>
      参数:
      o - 要与此map进行相等比较的对象
      返回:
      true 如果指定的对象等于这个map
      参见:
    • hashCode

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

      public EnumMap <K ,V > clone()
      返回此枚举map的浅表副本。值本身不会被克隆。
      重写:
      clone 在类 AbstractMap<K extends Enum<K>,V>
      返回:
      此枚举map的浅表副本
      参见: