读EnumSet源码_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 读EnumSet源码

读EnumSet源码

 2017/10/6 21:43:05  红领巾丶  程序员俱乐部  我要评论(0)
  • 摘要://一个基于枚举的Set,其效率在大多数时候都比HashSet高。//该类是一个抽象类其实现类有RegularEnumSet和JumboEnumSet。//创建一个最初包含指定元素的枚举(带of的方法实现基本都一样)publicstatic<EextendsEnum<E>>EnumSet<E>of(Ee){EnumSet<E>result=noneOf(e.getDeclaringClass());result.add(e)
  • 标签:源码
class="java">

//一个基于枚举的Set,其效率在大多数时候都比HashSet高。
//该类是一个抽象类其实现类有RegularEnumSet和JumboEnumSet。

//创建一个最初包含指定元素的枚举(带of的方法实现基本都一样)
public static <E extends Enum<E>> EnumSet<E> of(E e) {
        EnumSet<E> result = noneOf(e.getDeclaringClass());
        result.add(e);
        return result;
    }

public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
        //根据elementType获取枚举
        Enum[] universe = getUniverse(elementType);
        if (universe == null)
            throw new ClassCastException(elementType + " not an enum");
        //根据长度的不同调用不同的实现
        if (universe.length <= 64)
            return new RegularEnumSet<>(elementType, universe);
        else
            return new JumboEnumSet<>(elementType, universe);
    }

//包含指定元素类型的所有枚举
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType) {
        EnumSet<E> result = noneOf(elementType);
        result.addAll();
        return result;
    }

//构造一个和指定枚举相同的EnumSet。
public static <E extends Enum<E>> EnumSet<E> copyOf(EnumSet<E> s) {
        return s.clone();
    }

//从指定collection中初始化的一个EnumSet
public static <E extends Enum<E>> EnumSet<E> copyOf(Collection<E> c) {
        if (c instanceof EnumSet) {
            return ((EnumSet<E>)c).clone();
        } else {
            if (c.isEmpty())
                throw new IllegalArgumentException("Collection is empty");
            Iterator<E> i = c.iterator();
            E first = i.next();
            EnumSet<E> result = EnumSet.of(first);
            while (i.hasNext())
                result.add(i.next());
            return result;
        }
    }

//包含指定set中不包含的所有元素
public static <E extends Enum<E>> EnumSet<E> complementOf(EnumSet<E> s) {
        EnumSet<E> result = copyOf(s);
        result.complement();
        return result;
    }
上一篇: C#操作字符串方法总结<转> 下一篇: 没有下一篇了!
发表评论
用户名: 匿名