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 に挿入
add()
- 指定された列挙値を列挙セットに挿入しますaddAll()
指定されたコレクションのすべての要素をセットに挿入します
たとえば、
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,
注意 :
hasNext()
true
を返します 列挙セットに次の要素がある場合next()
列挙セットの次の要素を返します
EnumSet 要素を削除
remove()
- 指定された要素を列挙セットから削除しますremoveAll()
- 列挙セットからすべての要素を削除します
たとえば、
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