OpenJDK8 Enum相关

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值