>  기사  >  Java  >  Java 컬렉션의 EnumSet에 대한 간략한 토론

Java 컬렉션의 EnumSet에 대한 간략한 토론

无忌哥哥
无忌哥哥원래의
2018-07-19 10:51:391617검색


EnumSet

EnumSet은 열거형을 위해 특별히 설계된 컬렉션 클래스입니다. EnumSet의 모든 요소는 다음과 같은 열거형 값을 지정해야 합니다. EnumSet을 생성할 때 명시적 또는 암시적으로 지정되는 열거 유형입니다.

  1. EnumSet의 컬렉션 요소도 Enum의 열거 값 정의 순서에 따라 컬렉션 요소의 순서를 결정합니다. 수업.

  2. EnumSet은 내부적으로 비트 벡터 형식으로 저장되므로 이 저장 형식은 매우 컴팩트하고 효율적이므로 EnumSet 개체는 메모리를 거의 차지하지 않고 매우 효율적으로 실행됩니다. 특히 일괄 작업(containsAll() 및 keepAll() 메서드 호출 등)을 수행할 때 매개 변수도 EnumSet 컬렉션인 경우 일괄 작업의 실행 속도도 매우 빠릅니다.

  3. EnumSet 클래스는 이 클래스의 인스턴스를 생성하기 위해 생성자를 노출하지 않으며 프로그램은 제공되는 클래스 메서드를 통해 EnumSet 객체를 생성해야 합니다.

  4. EnumSet 컬렉션에서는 null 요소 추가를 허용하지 않습니다. null 요소를 삽입하려고 하면 EnumSet에서 NullPointerException 예외가 발생합니다.

  5. EnumSet에 null 요소가 포함되어 있는지 확인하거나 null 요소를 삭제하려고 하면 삭제 작업에서 false가 반환되지 않습니다. null 요소는 삭제됩니다.

방법 소개:

  • EnumSet allOf( 클래스 elementType): 지정된 열거 클래스의 모든 열거 값을 포함하는 EnumSet 컬렉션을 만듭니다.

  • EnumSet ComplementOf(EnumSet e): 요소 유형이 지정된 EnumSet의 요소 유형과 동일한 EnumSet 컬렉션을 만듭니다. 새로운 EnumSet 컬렉션에는 원래 EnumSet 컬렉션에 포함되지 않은 이 유형의 열거 클래스의 나머지 열거 값이 포함되어 있습니다. 즉, 새 EnumSet 컬렉션과 원래 EnumSet 컬렉션의 컬렉션 요소의 합은 모두 열거입니다. 열거 클래스의 값).

  • EnumSet copyOf(Collection c): EnumSet 컬렉션을 생성하려면 일반 컬렉션을 사용하세요.

  • EnumSet copyOf(EnumSet e): 지정된 EnumSet의 동일한 요소 유형 및 동일한 컬렉션 요소를 사용하여 EnumSet 컬렉션을 만듭니다.

  • EnumSet noneOf(Class elementType): 요소 유형이 지정된 열거 유형인 빈 EnumSet을 만듭니다.

  • EnumSet of(E first,E…rest): 하나 이상의 열거 값을 포함하는 EnumSet 컬렉션을 생성하고 여러 열거 값을 전달합니다. 입력한 항목은 동일한 열거 클래스에 속해야 합니다.

  • EnumSet range(E from,E to): 열거형 값의 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 컬렉션을 만들거나, 다른 컬렉션 컬렉션의 모든 요소를 ​​복사하여 새 EnumSet 컬렉션을 만듭니다.

예:

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

참고: 새 EnumSet 세트를 생성하기 위해 컬렉션 세트의 모든 요소를 ​​복사하는 경우 컬렉션 세트의 모든 요소는 필수 요소는 동일한 열거 클래스의 열거 값이어야 합니다.

오류 예:

c.add("Java");
    e6 = EnumSet.copyOf(c);//java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum

모든 일은 끝났습니다. 기쁨의 영혼은 과정에 있습니다.

위 내용은 Java 컬렉션의 EnumSet에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.