精华内容
下载资源
问答
  • EnumSet

    2018-11-15 08:25:28
    EnumSet

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                    EnumSet 是一个与枚举类型一起使用的专用 Set 实现。枚举set中所有元素都必须来自单个枚举类型(即必须是同类型,且该类型是Enum的子类)。
     枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。 此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,
     足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。
     如果指定的 collection 也是一个枚举 set,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。
     由 iterator 方法返回的迭代器按其自然顺序 遍历这些元素(该顺序是声明枚举常量的顺序)。
     返回的迭代器是弱一致的:它从不抛出 ConcurrentModificationException,也不一定显示在迭代进行时发生的任何 set 修改的效果。
     不允许使用 null 元素。试图插入 null 元素将抛出 NullPointerException。但是,
     试图测试是否出现 null 元素或移除 null 元素将不会抛出异常。
     像大多数 collection 一样,EnumSet 是不同步的。如果多个线程同时访问一个枚举 set,
     并且至少有一个线程修改该 set,则此枚举 set 在外部应该是同步的。这通常是通过对自然封装该枚举 set 的对象执行同步操作来完成的。
     如果不存在这样的对象,则应该使用 Collections.synchronizedSet(java.util.Set) 方法来“包装”该 set。
     最好在创建时完成这一操作,以防止意外的非同步访问:
      Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(Foo.class));
     实现注意事项:所有基本操作都在固定时间内执行。虽然并不保证,但它们很可能比其 HashSet 副本更快。
     如果参数是另一个 EnumSet 实例,则诸如 addAll() 和 AbstractSet.removeAll(java.util.Collection) 之类的批量操作
     也会在固定时间内执行。
    注意1:不允许使用 null 元素。试图插入 null 元素将抛出 NullPointerException。但是,
     试图测试是否出现 null 元素或移除 null 元素将不会抛出异常。
    注意2:EnumSet是不同步的。不是线程安全的。
    注意3:EnumSet的本质就为枚举类型定制的一个Set,且枚举set中所有元素都必须来自单个枚举类型。
    注意4:关于EnumSet的存储,文档中提到是这样的。 “枚举 set 在内部表示为位向量。”
     我想它应该是用一个bit为来表示的于之对应的枚举变量是否在集合中。
     比如:0x1001
     假如约定从低位开始,就表示第0个,和第三个枚举类型变量在EnumSet中。
     这样的话空间和时间性能也就应该很好。
    注意5:至于Enum的枚举常量的位置(序数)可以用Enum的ordinal()方法得到。
    注意6:在jdk内部可以一个数组的形式一个枚举的枚举常量。
    下面是来自来JDK中RegularEnumSet.java的一个示例
        private static <E extends Enum<E>> E[] getUniverse(Class<E> elementType) {
            return SharedSecrets.getJavaLangAccess()
         .getEnumConstantsShared(elementType);
        }
    注意7:元素属于哪种枚举类型必须在创建 set 时显式或隐式地指定.
    注意8:关于枚举类型的更多知识可参考《枚举类型》
    Enumset 是个虚类,我们只能通过它提供的静态方法来返回 Enumset 的实现类的实例。
    返回EnumSet的两种不同的实现 :如果EnumSet大小小于64,
    就返回RegularEnumSet实例(当然它继承自EnumSet),这个EnumSet实际上至用了一个long来存储这个EnumSet。
    如果 EnumSet大小大于等于64,则返回JumboEnumSet实例,它使用一个long[]来存储。这样做的好处很明显: 大多数情况下返回的RegularEnumSet效率比JumboEnumSet高很多。
    公共方法
    Public Methods
    static <E extends Enum<E>> EnumSet<E>allOf(Class<E> elementType)
    Creates an enum set filled with all the enum elements of the specified  elementType.
    EnumSet<E>clone()
    Creates a new enum set with the same elements as those contained in this enum set.
    static <E extends Enum<E>> EnumSet<E>complementOf(EnumSet<E> s)
    Creates an enum set.
    static <E extends Enum<E>> EnumSet<E>copyOf(EnumSet<E> s)
    Creates an enum set.
    static <E extends Enum<E>> EnumSet<E>copyOf(Collection<E> c)
    Creates an enum set.
    static <E extends Enum<E>> EnumSet<E>noneOf(Class<E> elementType)
    Creates an empty enum set.
    static <E extends Enum<E>> EnumSet<E>of(E e1, E e2, E e3, E e4)
    Creates a new enum set, containing only the specified elements.
    static <E extends Enum<E>> EnumSet<E>of(E start, E... others)
    Creates a new enum set, containing only the specified elements.
    static <E extends Enum<E>> EnumSet<E>of(E e)
    Creates a new enum set, containing only the specified element.
    static <E extends Enum<E>> EnumSet<E>of(E e1, E e2)
    Creates a new enum set, containing only the specified elements.
    static <E extends Enum<E>> EnumSet<E>of(E e1, E e2, E e3, E e4, E e5)
    Creates a new enum set, containing only the specified elements.
    static <E extends Enum<E>> EnumSet<E>of(E e1, E e2, E e3)
    Creates a new enum set, containing only the specified elements.
    static <E extends Enum<E>> EnumSet<E>range(E start, E end)
    Creates an enum set containing all the elements within the range defined by  start and  end (inclusive).
    实例1
    import java.util.Comparator;
    import java.util.EnumSet;
    import java.util.Random;
    import java.util.concurrent.SynchronousQueue;
    import java.util.concurrent.TimeUnit;
    public class  Test {
     /**
      * @param args
      */
      public static void  main(String[] args) {
      System.out.println("EnumSet.noneOf");
      EnumSet<Student> set=EnumSet.noneOf(Student.class);
      set.add(Student.HARRY);
      set.add(Student.ROBBIE);
      set.add(Student.ROBIN);
       for (Student p:set)
       System.out.println(p);
      set.clear();
      System.out.println("EnumSet.allOf");
      set=EnumSet.allOf(Student.class);
       for (Student p:set)
       System.out.println(p);
      set.clear();
      System.out.println("EnumSet.Of one");
      set=EnumSet.of(Student.ROBIN);
       for (Student p:set)
       System.out.println(p);
      System.out.println("EnumSet.Of two");
      set=EnumSet.of(Student.ROBIN,Student.HARRY);
       for (Student p:set)
       System.out.println(p);
     }
    }
    enum    Student
    {
     ROBIN("robin"),
     HARRY("harry",40),
     ROBBIE("robbie");
     String name;
     int age;
      private  Student(String name)
     {
      this(name,0);
     }
      private  Student(String name,int age)
     {
      this.name=name;
      this.age=age;
     }
      public  String toString()
     {
      return name;
     }
    }           

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • enumset

    2017-03-24 17:31:40
    EnumSet 是一个与枚举类型一起使用的专用 Set 实现。枚举set中所有元素都必须来自单个枚举类型(即必须是同类型,且该类型是Enum的子类)。  枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示...
    EnumSet 是一个与枚举类型一起使用的专用 Set 实现。枚举set中所有元素都必须来自单个枚举类型(即必须是同类型,且该类型是Enum的子类)。
     枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。 此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,
     足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。

     如果指定的 collection 也是一个枚举 set,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。
     由 iterator 方法返回的迭代器按其自然顺序 遍历这些元素(该顺序是声明枚举常量的顺序)。
     返回的迭代器是弱一致的:它从不抛出 ConcurrentModificationException,也不一定显示在迭代进行时发生的任何 set 修改的效果。
     不允许使用 null 元素。试图插入 null 元素将抛出 NullPointerException。但是,
     试图测试是否出现 null 元素或移除 null 元素将不会抛出异常。
     像大多数 collection 一样,EnumSet 是不同步的。如果多个线程同时访问一个枚举 set,
     并且至少有一个线程修改该 set,则此枚举 set 在外部应该是同步的。这通常是通过对自然封装该枚举 set 的对象执行同步操作来完成的。
     如果不存在这样的对象,则应该使用 Collections.synchronizedSet(java.util.Set) 方法来“包装”该 set。
     最好在创建时完成这一操作,以防止意外的非同步访问:
      Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(Foo.class));
     实现注意事项:所有基本操作都在固定时间内执行。虽然并不保证,但它们很可能比其 HashSet 副本更快。
     如果参数是另一个 EnumSet 实例,则诸如 addAll() 和 AbstractSet.removeAll(java.util.Collection) 之类的批量操作
     也会在固定时间内执行。
    注意1:不允许使用 null 元素。试图插入 null 元素将抛出 NullPointerException。但是,
     试图测试是否出现 null 元素或移除 null 元素将不会抛出异常。
    注意2:EnumSet是不同步的。不是线程安全的。
    注意3:EnumSet的本质就为枚举类型定制的一个Set,且枚举set中所有元素都必须来自单个枚举类型。
    注意4:关于EnumSet的存储,文档中提到是这样的。 “枚举 set 在内部表示为位向量。
     我想它应该是用一个bit为来表示的于之对应的枚举变量是否在集合中。
     比如:0x1001
     假如约定从低位开始,就表示第0个,和第三个枚举类型变量在EnumSet中。
     这样的话空间和时间性能也就应该很好。
    注意5:至于Enum的枚举常量的位置(序数)可以用Enum的ordinal()方法得到。
    注意6:在jdk内部可以一个数组的形式一个枚举的枚举常量。
    下面是来自来JDK中RegularEnumSet.java的一个示例
        private static <E extends Enum<E>> E[] getUniverse(Class<E> elementType) {
            return SharedSecrets.getJavaLangAccess()
         .getEnumConstantsShared(elementType);
        }

    注意7:元素属于哪种枚举类型必须在创建 set 时显式或隐式地指定.
    注意8:关于枚举类型的更多知识可参考《枚举类型》
    Enumset 是个虚类,我们只能通过它提供的静态方法来返回 Enumset 的实现类的实例。
    返回EnumSet的两种不同的实现 :如果EnumSet大小小于64,
    就返回RegularEnumSet实例(当然它继承自EnumSet),这个EnumSet实际上至用了一个long来存储这个EnumSet。
    如果 EnumSet大小大于等于64,则返回JumboEnumSet实例,它使用一个long[]来存储。这样做的好处很明显: 大多数情况下返回的RegularEnumSet效率比JumboEnumSet高很多。
    公共方法
    Public Methods
    static <E extends  Enum<E>>  EnumSet<E> allOf( Class<E> elementType)
    Creates an enum set filled with all the enum elements of the specified  elementType.
    EnumSet<E> clone()
    Creates a new enum set with the same elements as those contained in this enum set.
    static <E extends  Enum<E>>  EnumSet<E> complementOf( EnumSet<E> s)
    Creates an enum set.
    static <E extends  Enum<E>>  EnumSet<E> copyOf( EnumSet<E> s)
    Creates an enum set.
    static <E extends  Enum<E>>  EnumSet<E> copyOf( Collection<E> c)
    Creates an enum set.
    static <E extends  Enum<E>>  EnumSet<E> noneOf( Class<E> elementType)
    Creates an empty enum set.
    static <E extends  Enum<E>>  EnumSet<E> of(E e1, E e2, E e3, E e4)
    Creates a new enum set, containing only the specified elements.
    static <E extends  Enum<E>>  EnumSet<E> of(E start, E... others)
    Creates a new enum set, containing only the specified elements.
    static <E extends  Enum<E>>  EnumSet<E> of(E e)
    Creates a new enum set, containing only the specified element.
    static <E extends  Enum<E>>  EnumSet<E> of(E e1, E e2)
    Creates a new enum set, containing only the specified elements.
    static <E extends  Enum<E>>  EnumSet<E> of(E e1, E e2, E e3, E e4, E e5)
    Creates a new enum set, containing only the specified elements.
    static <E extends  Enum<E>>  EnumSet<E> of(E e1, E e2, E e3)
    Creates a new enum set, containing only the specified elements.
    static <E extends  Enum<E>>  EnumSet<E> range(E start, E end)
    Creates an enum set containing all the elements within the range defined by  start and  end (inclusive).
    实例1
    import java.util.Comparator;
    import java.util.EnumSet;
    import java.util.Random;
    import java.util.concurrent.SynchronousQueue;
    import java.util.concurrent.TimeUnit;
    public class  Test {
     /**
      * @param args
      */

      public static void  main(String[] args) {
      System.out.println("EnumSet.noneOf");
      EnumSet<Student> set=EnumSet.noneOf(Student.class);
      set.add(Student.HARRY);
      set.add(Student.ROBBIE);
      set.add(Student.ROBIN);

       for (Student p:set)
       System.out.println(p);
      set.clear();
      System.out.println("EnumSet.allOf");
      set=EnumSet.allOf(Student.class);
       for (Student p:set)
       System.out.println(p);
      set.clear();
      System.out.println("EnumSet.Of one");
      set=EnumSet.of(Student.ROBIN);
       for (Student p:set)
       System.out.println(p);
      System.out.println("EnumSet.Of two");
      set=EnumSet.of(Student.ROBIN,Student.HARRY);
       for (Student p:set)
       System.out.println(p);
     }
    }
    enum    Student
    {
     ROBIN("robin"),
     HARRY("harry",40),
     ROBBIE("robbie");
     String name;
     int age;
      private  Student(String name)
     {
      this(name,0);
     }
      private  Student(String name,int age)
     {
      this.name=name;
      this.age=age;
     }
      public  String toString()
     {
      return name;
     }
    展开全文
  • EnumSet实例

    2019-06-13 10:00:37
    import java.util.EnumSet; public class EnumSetTest { public static void main(String[] args) { //1.创建一个包含Session(枚举类)里所有枚举值的EnumSet集合 EnumSet e1 = EnumSet...
    package com.collection;
    
    import java.util.EnumSet;
    
    public class EnumSetTest {
    
        public static void main(String[] args) {
            //1.创建一个包含Session(枚举类)里所有枚举值的EnumSet集合
            EnumSet e1 = EnumSet.allOf(Session.class);
            System.out.println(e1);//[SPRING, SUMMER, FAIL, WINTER]
    
            //2.创建一个空EnumSet
            EnumSet e2 = EnumSet.noneOf(Session.class);
            System.out.println(e2);//[]
    
            //3. add()空EnumSet集合中添加枚举元素
            e2.add(Session.SPRING);
            e2.add(Session.SUMMER);
            System.out.println(e2);//[SPRING, SUMMER]
    
            //4. 以指定枚举值创建EnumSet集合
            EnumSet e3 = EnumSet.of(Session.SPRING,Session.FAIL);
            System.out.println(e3);//[SPRING, FAIL]
    
            //5.创建一个包含从from枚举值到to枚举值范围内所有枚举值的EnumSet集合。
            EnumSet e4 = EnumSet.range(Session.SPRING,Session.FAIL);
            System.out.println(e4);//[SPRING, SUMMER, FAIL]
    
            //6.创建一个其元素类型与指定EnumSet里元素类型相同的EnumSet集合,
            //  新EnumSet集合包含原EnumSet集合所不包含的枚举值
            EnumSet e5 = EnumSet.complementOf(e4);
            System.out.println(e5);//[WINTER]
        }
    }
    
    //创建一个枚举
    enum Session{
        SPRING,
        SUMMER,
        FAIL,
        WINTER
    }
    

    注意:
    除此之外还可以复制另一个EnumSet集合中的所有元素来创建新的EnumSet集合,或者复制另一个Collection集合中的所有元素来创建新的EnumSet集合。

    Collection c = new HashSet();
    c.clear();
    c.add(Session.SPRING);
    c.add(Session.FAIL);
    EnumSet e6 = EnumSet.copyOf©;
    System.out.println(e6);//[SPRING, FAIL]


    返回EnumSet相关知识点

    展开全文
  • java Enumset

    2017-07-05 19:13:49
    java 的 Enumset 类似 ArrayList, 是对 Enum 类型的容器化,具有一些特定的方法: allof, range, complementOf 举例: import java.util.EnumSet; public class EnumSetTest { enum Day { MONDAY, TUESDAY, ...

    java 的 Enumset 类似 ArrayList, 是对 Enum 类型的容器化,具有一些特定的方法: allof, range, complementOf

    举例:

    import java.util.EnumSet;
    
    public class EnumSetTest {
    
    	enum Day {
    		MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
    	}
    	 
    	public static void main(String[] args) {
    		// Get all constants of the Day enum
    		EnumSet<Day> allDays = EnumSet.allOf(Day.class);
    		print(allDays, "All days: " );
    		// Get all constants from MONDAY to FRIDAY of the Day enum
    		EnumSet<Day> weekDays = EnumSet.range(Day.MONDAY, Day.FRIDAY);
    		print(weekDays, "Weekdays: ");
    		// Get all constants that are not from MONDAY to FRIDAY of the
    		// Day enum Essentially, we will get days representing weekends
    		EnumSet<Day> weekends = EnumSet.complementOf(weekDays);
    		print(weekends, "Weekends: ");
    	}
    
    	public static void print(EnumSet<Day> days, String msg) {
    		System.out.print(msg);
    		for(Day d : days) {
    			System.out.print(d + " ");
    		}
    		System.out.println();
    	}
    }


    输出:

    name=LOW, ordinal=0, days=30
    name=MEDIUM, ordinal=1, days=15
    name=HIGH, ordinal=2, days=7
    name=URGENT, ordinal=3, days=1

    展开全文
  • EnumSet源码

    2020-02-26 17:15:37
    1、EnumSet分析 EnumSet是抽象类,主要通过底层的两个类进行操作 内部使用位向量,表示很简洁,节省空间 2、实现原理 采用位向量实现 对象内部组成 //表示类型信息 final Class<E> elementType;...
  • enumset 在上一篇博客文章中,我们发现了EnumMap用于带有枚举键的映射。 您可能已经观察到,还有一个专门针对枚举优化的Set : EnumSet 。 我们再次定义一个CoffeeType枚举: public enum CoffeeType { ...
  • java EnumSet

    2018-12-15 23:41:00
    enum FrontConstant{plain,bold,italic} public static void main(String[] args) { ... EnumSet<FrontConstant> es=EnumSet.of(FrontConstant.plain);//#14 Iterator it=es.iterator...
  • 阅读EnumSet抽象类源码

    2020-08-28 16:13:34
    主要介绍了阅读EnumSet抽象类源码,具有一定参考价值,需要的朋友可以了解下。
  • EnumSet基本用法

    2019-10-17 12:07:29
    EnumSet基本用法 enum Season { SPRING, SUMMER, FALL, WINTER } public class EnumSetTest { public static void main(String[] args) { //创建一个EnumSet集合,集合元素就是Season枚举类的全部枚举值 ...
  • java enumset EnumSet类copyOf()方法 (EnumSet Class copyOf() method) Syntax: 句法: public static EnumSet copyOf(Collection co); public static EnumSet copyOf(EnumSet es); copyOf() method is avail...
  • EnumSet源码解析

    2019-08-03 14:43:58
    EnumSet EnumSet的实现与EnumMap没有任何关系,而是用极为精简和高效的位向量实现的; 位向量是计算机程序中解决问题的一种常用方式 1 实现原理 1.1 内部组成 final Class<E> elementType;//类型信息 final ...
  • EnumSet是Java枚举类型的泛型容器,Java既然有了SortedSet、TreeSet、HashSet等容器,为何还要多一个EnumSet呢?答案肯定是EnumSet有一定的特性,举个例子,EnumSet的速度很快。其他特性不一一列举了,毕竟本文的...
  • java enumset EnumSet类clone()方法 (EnumSet Class clone() method) clone() method is available in java.util package. clone()方法在java.util包中可用。 clone() method is used to return a shallow copy of ...
  • java enumset EnumSet类range()方法 (EnumSet Class range() method) range() method is available in java.util package. range()方法在java.util包中可用。 range() method is used to create an enum set and ...
  • EnumSet相关知识点

    2019-06-13 10:01:03
    EnumSet 是一个专为枚举设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定。 EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺序来...
  • 主要介绍了Java中EnumSet代替位域代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
  • EnumSet源码初探

    2016-04-24 20:54:26
    EnumSet类定义最近项目原因可能会用到EnumSet,于是周末利用闲暇时间阅读了一下EnumSet的源码,对源码中的类说明和方法说明根据自己的理解进行了翻译,水平有限,其中翻译不对的地方希望热心的朋友能够批评指正。...
  • EnumSet-Enumeration

    2018-01-19 01:36:21
    EnumSet 是一个专为枚举设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定。 EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺序来决定...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,809
精华内容 3,923
关键字:

EnumSet