工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java EnumSet

Java EnumSet

このチュートリアルでは、例を使用して Java EnumSet クラスとそのさまざまなメソッドについて学習します。

EnumSet Java コレクション フレームワークのクラスは、単一の列挙型の要素のセット実装を提供します。

EnumSet について学ぶ前に、Java Enum について知っておいてください。

Set インターフェイスを実装します。


EnumSet の作成

列挙型セットを作成するには、java.util.EnumSet をインポートする必要があります 最初にパッケージ化します。

他のセットの実装とは異なり、列挙型セットにはパブリック コンストラクターがありません。 enum セットを作成するには、定義済みのメソッドを使用する必要があります。

1. allOf(Size) の使用

allof() メソッドは、指定された列挙型 Size のすべての値を含む列挙セットを作成します .たとえば、

import java.util.EnumSet;

class Main {
    // an enum named Size
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }
    
    public static void main(String[] args) {

        // Creating an EnumSet using allOf()
        EnumSet<Size> sizes = EnumSet.allOf(Size.class);

        System.out.println("EnumSet: " + sizes);
    }

}

出力

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]

声明に注目してください、

EnumSet<Size> sizes = EnumSet.allOf(Size.class);

ここでは、Size.class サイズを示します


2. noneOf(Size) の使用

noneOf() メソッドは空の列挙型セットを作成します。たとえば、

import java.util.EnumSet;

class Main {

     // an enum type Size
    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }

    public static void main(String[] args) {

        // Creating an EnumSet using noneOf()
        EnumSet<Size> sizes = EnumSet.noneOf(Size.class);

        System.out.println("Empty EnumSet: " + sizes);
    }
}

出力

Empty EnumSet : []

ここでは、sizes という名前の空の列挙型を作成しました。 .

注意 :列挙型 Size の要素のみを挿入できます 上記のプログラムで。これは、Size を使用して空の列挙型セットを作成したためです。 列挙。


3. range(e1, e2) メソッドの使用

range() メソッドは、e1 の間の列挙型のすべての値を含む列挙型セットを作成します と e2 両方の値を含みます。たとえば、

import java.util.EnumSet;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }

    public static void main(String[] args) {

        // Creating an EnumSet using range()
        EnumSet<Size> sizes = EnumSet.range(Size.MEDIUM, Size.EXTRALARGE);

        System.out.println("EnumSet: " + sizes);
    }
}

出力

EnumSet: [MEDIUM, LARGE, EXTRALARGE]

4. of() メソッドの使用

of() メソッドは、指定された要素を含む列挙セットを作成します。たとえば、

import java.util.EnumSet;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }

    public static void main(String[] args) {

        // Using of() with a single parameter
        EnumSet<Size> sizes1 = EnumSet.of(Size.MEDIUM);
        System.out.println("EnumSet1: " + sizes1);

        EnumSet<Size> sizes2 = EnumSet.of(Size.SMALL, Size.LARGE);
        System.out.println("EnumSet2: " + sizes2);
    }
}

出力

EnumSet1: [MEDIUM]
EnumSet2: [SMALL, LARGE]

EnumSet のメソッド

EnumSet クラスは、列挙型セットでさまざまな要素を実行できるようにするメソッドを提供します。


要素を EnumSet に挿入

たとえば、

import java.util.EnumSet;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }

    public static void main(String[] args) {

        // Creating an EnumSet using allOf()
        EnumSet<Size> sizes1 = EnumSet.allOf(Size.class);

        // Creating an EnumSet using noneOf()
        EnumSet<Size> sizes2 = EnumSet.noneOf(Size.class);

        // Using add method
        sizes2.add(Size.MEDIUM);
        System.out.println("EnumSet Using add(): " + sizes2);

        // Using addAll() method
        sizes2.addAll(sizes1);
        System.out.println("EnumSet Using addAll(): " + sizes2);
    }
}

出力

EnumSet using add(): [MEDIUM]
EnumSet using addAll(): [SMALL, MEDIUM, LARGE, EXTRALARGE]

上記の例では、addAll() を使用しています。 列挙セット sizes1 のすべての要素を挿入するメソッド 列挙セット sizes2 に .

ArrayList などの他のコレクションから要素を挿入することも可能です 、 LinkedList などを addAll() を使用して列挙セットに .ただし、すべてのコレクションは同じ列挙型である必要があります。


EnumSet 要素へのアクセス

列挙セットの要素にアクセスするには、 iterator() を使用できます 方法。この方法を使用するには、java.util.Iterator をインポートする必要があります。 パッケージ。たとえば、

import java.util.EnumSet;
import java.util.Iterator;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }

    public static void main(String[] args) {

        // Creating an EnumSet using allOf()
        EnumSet<Size> sizes = EnumSet.allOf(Size.class);

        Iterator<Size> iterate = sizes.iterator();

        System.out.print("EnumSet: ");
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

出力

EnumSet: SMALL, MEDIUM, LARGE, EXTRALARGE,

注意 :


EnumSet 要素を削除

たとえば、

import java.util.EnumSet;

class Main {

    enum Size {
        SMALL, MEDIUM, LARGE, EXTRALARGE
    }

    public static void main(String[] args) {

        // Creating EnumSet using allOf()
        EnumSet<Size> sizes = EnumSet.allOf(Size.class);
        System.out.println("EnumSet: " + sizes);

        // Using remove()
        boolean value1 = sizes.remove(Size.MEDIUM);
        System.out.println("Is MEDIUM removed? " + value1);

        // Using removeAll()
        boolean value2 = sizes.removeAll(sizes);
        System.out.println("Are all elements removed? " + value2);
    }
}

出力

EnumSet: [SMALL, MEDIUM, LARGE, EXTRALARGE]
Is MEDIUM removed? true
Are all elements removed? true

その他の方法

メソッド 説明
copyOf() EnumSet のコピーを作成します
contains() EnumSet を検索します 指定された要素に対して、ブール値の結果を返します
isEmpty() EnumSet かどうかをチェックします 空です
size() EnumSet のサイズを返します
clear() EnumSet からすべての要素を削除します

クローン可能でシリアライズ可能なインターフェース

EnumSet クラスは Cloneable も実装しています と Serializable

クローン可能なインターフェース

EnumSet を許可します クラスのインスタンスのコピーを作成するクラス。

シリアライズ可能なインターフェース

Java オブジェクトをネットワーク経由で送信する必要がある場合は常に、オブジェクトをビットまたはバイトに変換する必要があります。これは、Java オブジェクトをネットワーク経由で送信できないためです。

Serializable インターフェイスにより、クラスをシリアル化できます。これは Serializable を実装するクラスのオブジェクトを意味します ビットまたはバイトに変換できます。


EnumSet を使用する理由

EnumSet 他のセットの実装 (HashSet など) よりも効率的な列挙値の格納方法を提供します。 、 TreeSet ).

列挙セットには、特定の列挙の列挙値のみが格納されます。したがって、JVM はセットのすべての可能な値をすでに認識しています。

これが、列挙セットがビットのシーケンスとして内部的に実装される理由です。 Bits は、列挙型セットに要素が存在するかどうかを指定します。

その要素がセット内に存在する場合、対応する要素のビットがオンになります。


Java

  1. Java オペレーター
  2. Java コメント
  3. Java for-each ループ
  4. Java 文字列
  5. Java インターフェイス
  6. Java匿名クラス
  7. Java 列挙型
  8. Java 列挙型コンストラクター
  9. Java try-with-resources
  10. Java アノテーション
  11. Java アサーション