モジュール java.base
パッケージ java.util

クラスEnumSet<E extends Enum<E>>

java.lang.Object
型パラメータ:
E - このセットで保持される要素の列挙型
すべての実装されたインタフェース:
Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>

public abstract sealed class EnumSet<E extends Enum<E>> extends AbstractSet<E> implements Cloneable, Serializable
列挙型と一緒に使用するための特殊なSet実装です。 enumセット内の要素はすべて、セットの作成時に、指定された単一のenum型から明示的または暗黙的に生成される必要があります。 enumセットは、内部ではビット・ベクトルとして表現されます。 この表現は、非常に簡潔かつ効率的です。 このクラスの領域および時間パフォーマンスは、従来のintベースの"ビット・フラグ。"に代わる高品質でタイプ・セーフなクラスとして使用できる十分な大きさである必要があります バルク操作でも、(containsAllretainAllなど)の引数が列挙セットでもある場合は、非常に高速に実行する必要があります。

iteratorメソッドから返されたイテレータは、「自然秩序」 (列挙定数が宣言される順序)の要素を走査します。 返されるイテレータは、弱一貫性を保持します。これがConcurrentModificationExceptionをスローすることはありません。また、反復の進行中に実行されるセットへの変更の影響を表示することも、非表示にすることも可能です。

null要素は許可されません。 null要素を挿入しようとすると、NullPointerExceptionがスローされます。 ただし、null要素の存在をテストしたり、削除を試みる場合は正常に機能します。

ほとんどのコレクション実装と同様に、EnumSetは同期されません。 複数のスレッドが並行してenumセットにアクセスし、それらのスレッドの少なくとも1つがセットを変更する場合には、外部で同期をとる必要があります。 通常、これは、enumセットを自然にカプセル化するいくつかのオブジェクトで同期をとることによって達成されます。 そのようなオブジェクトが存在しない場合は、Collections.synchronizedSet(java.util.Set<T>)メソッドを使用してセットを「ラップ」する必要があります。 これは、偶発的な非同期アクセスを防ぐために、作成時に行うのが最適です。

 Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class));
 

実装にあたってのノート: 基本のオペレーションはすべて一定時間に実行されます。 これらは通常、HashSetの対応するオペレーションよりもずっと高速に動作します(ただし保証外)。 引数もenumセットであれば、一括オペレーションでさえ一定時間に実行されます。

このクラスは、Java Collections Frameworkのメンバーです。

導入されたバージョン:
1.5
関連項目: