Enum枚举相关类
Enum枚举类
/**
* 枚举常量名
*/
private final String name;
/**
* 返回枚举常量的名字
*/
public final String name()
/**
* 枚举常量的索引,从0开始
*/
private final int ordinal;
/**
* 返回枚举常量的索引位置,从0开始
*/
public final int ordinal()
/**
* 枚举类型专有构造器,由编译器触发,无法显示触发
*/
protected Enum(String name, int ordinal)
/**
* 返回枚举类型的常量名
*/
public String toString()
/**
* 判断对象与枚举常量是否相等
*/
public final boolean equals(Object other)
/**
* 返回枚举常量的hashcode
*/
public final int hashCode()
/**
* 枚举类型不支持clone方式,以确保单例特性。
* 抛CloneNotSupportedException 不支持clone异常
*/
protected final Object clone() throws CloneNotSupportedException
/**
* 比较枚举常量的次序(只能由枚举与枚举类型比较)
*/
public final int compareTo(E o)
/**
* 返回枚举常量的枚举类型
*/
@SuppressWarnings("unchecked")
public final Class<E> getDeclaringClass()
/**
* 返回某枚举类某常量名的枚举常量
* @since 1.5
*/
public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
/**
* 枚举类型不应有finalize终结方法
*/
protected final void finalize() { }
EnumSet枚举集合
其中,EnumSet是一个抽象类,内部所有的元素都来自单个枚举类型;非线程安全。提供了两个实现类
1) RegularEnumSet 枚举集合元素<=64时的实现,
2) JumboEnumSet 枚举集合元素>64时的实现,
两个实现类区别表现在类成员,RegularEnumSet 中用long类型(64 bit)的elements来表示枚举集合元素,每个bit表示对应索引位置(ordinal)的枚举常量是否在集合中,因此最多能表示64个;JumboEnumSet中的elements用的是long型的数组,并用数组[j]的第i位表示枚举的第 64*j+i索引上的常量。
相关具体内容可参考:https://www.jianshu.com/p/f7035c5816b1
/**
* 该集合中所有元素的类型
*/
final Class<E> elementType;
/**
* 缓存的枚举常量
*/
final Enum<?>[] universe;
EnumSet(Class<E>elementType, Enum<?>[] universe)
/**
* 根据指定的枚举类型创建一个空的枚举集合
* 重点:
* 元素<=64, 用RegularEnumSet实现
* 元素>64, 用JumboEnumSet实现
*/
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType)
/**
* 根据指定的枚举类型,创建一个包含枚举所有元素的枚举集合
*/
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
/**
* Adds all of the elements from the appropriate enum type to this enum
* set, which is empty prior to the call.
*/
abstract void addAll();
/**
* 拷贝枚举集合
*/
public static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s)
/**
* 从给定的集合,创建一个枚举集合
*/
public static <E extends Enum<E>> EnumSet<E> copyOf(Collection<E> c)
/**
* 创建一个与给定枚举集合同类型的枚举集合,初始化的集合元素为给定集合中元素的补集
*/
public static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s)
/**
* 按给定的枚举常量生成枚举集合,返回的集合中只有一个元素
*/
public static <E extends Enum<E>> EnumSet<E> of(...)
/**
* 根据给定枚举类型,按枚举的自然顺序区间生成枚举集合
*/
public static <E extends Enum<E>> EnumSet<E> range(E from, E to)
/**
* Adds the specified range to this enum set, which is empty prior
* to the call.
*/
abstract void addRange(E from, E to);
/**
* 拷贝
*/
public EnumSet<E> clone()
/**
* Complements the contents of this enum set.
*/
abstract void complement();
/**
* 给定的元素类型,如果不与当前对象的枚举类型,抛ClassCastException类型转换异常
*/
final void typeCheck(E e)
EnumMap枚举映射
带有枚举类型键的特殊map实现。
/**
* map中键的枚举类型
*/
private final Class<K> keyType;
/**
* 缓存的枚举键值
*/
private transient K[] keyUniverse;
/**
* map的数组表示。第i位存储的是枚举类自然序列位置i上的map值,默认为null
*/
private transient Object[] vals;
/**
* 本map中的元素数量
*/
private transient int size = 0;
/**
* 用一个非null对象来表示null
*/
private static final Object NULL = new Object()
private Object maskNull(Object value)
private V unmaskNull(Object value)
/**
* 根据给定的枚举类型,创建一个空的EnumMap
*/
public EnumMap(Class<K> keyType)
/**
* 复制构造
*/
public EnumMap(EnumMap<K, ? extends V> m)
/**
* 从给定的map中创建EnumMap,如果参数不是EnumMap类型,必须要有一个元素用来获得键值类型
*/
public EnumMap(Map<K, ? extends V> m)
/**
* 返回当前键值对的数量
*/
public int size()
/**
* 判断是否存在特定值的键值对
*/
public boolean containsValue(Object value)
/**
* 判断EnumMap中是否存在特定键
*/
public boolean containsKey(Object key)
private boolean containsMapping(Object key, Object value)
/**
* 返回特定键的值,不存在返回null
* 返回null分为两种情况:(没有key;对应的key值就是null),两种情况可用containsKey方法区分
*/
public V get(Object key)
/**
* 设定enumMap特定键的值
*/
public V put(K key, V value)
/**
* 根据键移除特定的键值对
*/
public V remove(Object key)
private boolean removeMapping(Object key, Object value)
/**
* 判断给定的参数是否是该EnumMap有效的参数(仅供内部使用)
*/
private boolean isValidKey(Object key)
/**
* 从既有键值对中复制所有键值对
*/
public void putAll(Map<? extends K, ? extends V> m)
/**
* 清空所有的键值对
*/
public void clear()
/**
* 键值对集合。第一次获取时,进行初始化
*/
private transient Set<Map.Entry<K,V>> entrySet;
/**
* 按枚举常量定义的自然顺序返回键集合
*/
public Set<K> keySet()
/**
* 按枚举常量定义的自然顺序返回键对应的值集合
*/
public Collection<V> values()
/**
* 返回键值对集合,遵从枚举常量的自然顺序
*/
public Set<Map.Entry<K,V>> entrySet()
/**
* equals方法
*/
public boolean equals(Object o)
private boolean equals(EnumMap<?,?> em)
public int hashCode()
private int entryHashCode(int index)
/**
* Returns a shallow copy of this enum map. (The values themselves
* are not cloned.
*
* @return a shallow copy of this enum map
*/
public EnumMap<K, V> clone()
/**
* Throws an exception if e is not of the correct type for this enum set.
*/
private void typeCheck(K key)
/**
* Returns all of the values comprising K.
* The result is uncloned, cached, and shared by all callers.
*/
private static <K extends Enum<K>> K[] getKeyUniverse(Class<K> keyType)