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

インタフェースSet<E>

型パラメータ:
E - このセットで保持される要素の型
すべてのスーパー・インタフェース:
Collection<E>, Iterable<E>
既知のすべてのサブインタフェース:
EventSet, NavigableSet<E>, SequencedSet<E>, SortedSet<E>
既知のすべての実装クラス:
AbstractSet, ConcurrentHashMap.KeySetView, ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, JobStateReasons, LinkedHashSet, TreeSet

public interface Set<E> extends Collection<E>
重複要素のないコレクションです。 すなわち、セットは、e1.equals(e2)であるe1e2の要素ペアは持たず、null要素を最大1つしか持ちません。 その名前が示すように、このインタフェースは、数学で言う集合の抽象化をモデル化します。

Setインタフェースは、Collectionインタフェースから継承されたもの以外に、すべてのコンストラクタの契約およびaddequalsおよびhashCodeメソッドの契約に追加の規定を配置します。 便宜上、ほかの継承メソッドの宣言もここに含まれます。 (これらの宣言に付随する仕様は、Setインタフェースに合せて調整されていますが、追加の規定は含まれていません。)

コンストラクタについての追加規定として、すべてのコンストラクタは、重複要素のないセットを作成しなければなりません(上記を参照)。

ノート: 可変オブジェクトがセット要素として使用される場合は、細心の注意が必要です。 オブジェクトがセット内の要素である間にequalsの比較に影響する方法でオブジェクトの値が変更された場合、セットの動作は指定されません。 この禁止事項の特例により、セットがそれ自体を要素として持つことは許可されません。

セットの実装には、格納できる要素に制限があるものもあります。 たとえば、null要素を禁止する実装や、null要素の型に制限がある実装もあります。 不適格要素を追加しようとすると、チェックされていない例外(通常はNullPointerExceptionまたはClassCastException)がスローされます。 不適格な要素を照会しようとすると、例外がスローされる場合や、ただfalseを返す場合もあります。前者の動作を実行する実装もあれば、後者の動作を実行する実装もあります。 もう少し一般的に言うと、セットへの挿入がされない不適当な要素を処理しようとすると、例外がスローされる場合や、処理が有効になる場合があります。 このインタフェースの仕様では、そうした例外は「任意」と記載されています。

変更不可能なSets

Set.ofおよびSet.copyOf静的ファクトリ・メソッドは、変更不可能なセットを作成する便利な方法を提供します。 これらのメソッドによって作成されたSetインスタンスには、次の特性があります:

  • それらはunmodifiableです。 要素を追加または削除することはできません。 Setで任意のmutatorメソッドを呼び出すと、常にUnsupportedOperationExceptionがスローされます。 ただし、含まれている要素自体が可変である場合は、Setが一貫性のない動作をするか、その内容が変化しているように見える可能性があります。
  • null要素は許可されません。 null要素でそれらを作成しようとすると、NullPointerExceptionになります。
  • すべての要素が直列化可能である場合は、直列化可能です。
  • 作成時に重複する要素を拒否します。 静的ファクトリ・メソッドに渡された重複要素は、IllegalArgumentExceptionになります。
  • セット要素の反復順序は未指定であり、変更される可能性があります。
  • それらはvalue-basedです。 プログラマは、equalのインスタンスを交換可能として処理し、同期に使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。 呼び出し元は、返されたインスタンスのアイデンティティについて何も想定しないでください。 ファクトリは、新しいインスタンスを作成したり、既存のインスタンスを再利用できます。
  • これらは、「直列化された形式」ページで指定したとおりに直列化されます。

このインタフェースは、Java Collections Frameworkのメンバーです。

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