ホームページ  >  記事  >  Java  >  Java コレクションの EnumSet に関する簡単な説明

Java コレクションの EnumSet に関する簡単な説明

无忌哥哥
无忌哥哥オリジナル
2018-07-19 10:51:391650ブラウズ


EnumSet

EnumSet は、列挙専用に設計されたコレクション クラスです。EnumSet のすべての要素は、指定された EnumSet を作成するときに明示的または暗黙的に使用される、指定された列挙型の列挙値である必要があります。

  1. EnumSet の set 要素も順序付けされます。EnumSet は、Enum クラス内で列挙値が定義されている順序に基づいて set 要素の順序を決定します。

  2. EnumSet はビット ベクトルの形式で内部的に格納されるため、この格納形式は非常にコンパクトで効率的であるため、EnumSet オブジェクトは占有するメモリが非常に少なく、非常に効率的に実行されます。特にバッチ操作 (containsAll() メソッドや RetainAll() メソッドの呼び出しなど) を実行する場合、パラメーターも EnumSet コレクションであれば、バッチ操作の実行速度も非常に速くなります。

  3. EnumSet クラスは、このクラスのインスタンスを作成するためのコンストラクターを公開せず、プログラムは、提供するクラス メソッドを通じて EnumSet オブジェクトを作成する必要があります。

  4. EnumSet コレクションでは null 要素を追加できません。null 要素を挿入しようとすると、EnumSet は NullPointerException 例外をスローします。

  5. EnumSet に null 要素が含まれているかどうかを確認したいだけの場合、または null 要素を削除しようとした場合は、null 要素が削除されないため、削除操作だけで false が返されます。

メソッドの紹介:

  • EnumSet allOf(Class elementType): 指定された列挙クラスのすべての列挙値を含む EnumSet コレクションを作成します。

  • EnumSetcomplementOf(EnumSet e): 指定された EnumSet の要素タイプと同じ要素タイプを持つ EnumSet セットを作成します。新しい EnumSet セットには、このタイプの列挙クラスの残りの列挙が含まれます。元の EnumSet セットの列挙値 (つまり、新しい EnumSet コレクションと元の EnumSet コレクションのコレクション要素の合計が、列挙クラスのすべての列挙値になります)。

  • EnumSet copyOf(Collection c): 通常のコレクションを使用して EnumSet コレクションを作成します。

  • EnumSet copyOf(EnumSet e): 指定された EnumSet の同じ要素型と同じ set 要素を持つ EnumSet コレクションを作成します。

  • EnumSet noneOf(Class elementType): 要素タイプが指定された列挙型である空の EnumSet を作成します。

  • EnumSet of(E first,E…rest): 1 つ以上の列挙値を含む EnumSet コレクションを作成します。渡される複数の列挙値は、同じ列挙クラスに属している必要があります。

  • EnumSet range(E from,E to): from 列挙値から 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 コレクションを作成したり、別の Collection コレクションのすべての要素をコピーして新しい 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

Things win are completed; Joy’s soul is in the doing.
取得は完了であり、幸福の本質はその過程にあります。

以上がJava コレクションの EnumSet に関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。