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

クラスHashSet<E>

型パラメータ:
E - このセットで保持される要素の型
すべての実装されたインタフェース:
Serializable, Cloneable, Iterable<E>, Collection<E>, Set<E>
直系の既知のサブクラス:
JobStateReasons, LinkedHashSet

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable
このクラスは、ハッシュ表(実際にはHashMapのインスタンス)に連動し、Setインタフェースを実装します。 このクラスでは、セットの反復順序について保証しません。特に、その順序を一定に保つことを保証しません。 このクラスは、null要素を許容します。

このクラスは、ハッシュ関数が複数のバケットで適切に要素を分散することを前提として、基本のオペレーション(addremovecontains、およびsize)で一定時間の性能を提供します。 セットの反復処理では、HashSetのインスタンスのサイズ(要素数)と基となるHashMapのインスタンスの「容量」(バケット数)の合計に比例した時間が必要です。 したがって、反復処理の性能が重要な場合は、初期容量をあまり高く(負荷係数をあまり低く)設定しないことが非常に重要です。

この実装はsynchronizedされません。 複数のスレッドが並行してハッシュ・セットにアクセスし、それらのスレッドの少なくとも1つがセットを変更する場合には、外部で同期をとる必要があります これは通常、セットを自然にカプセル化する一部のオブジェクトでsynchronizedすることによって達成されます。 そのようなオブジェクトが存在しない場合は、Collections.synchronizedSetメソッドを使用してセットを「ラップ」することをお薦めします。 セットが誤ってsynchronizedなしでアクセスされるのを防ぐために、作成時に行うことをお薦めします。

   Set s = Collections.synchronizedSet(new HashSet(...));

このクラスのiteratorメソッドによって返されるイテレータは、フェイルファストです。イテレータの作成後に、イテレータ自体のremoveメソッド以外の方法でセットが変更されると、イテレータはConcurrentModificationExceptionをスローします。 このように、並行して変更が行われると、イテレータは、将来の予測できない時点において予測できない動作が発生する危険を回避するために、ただちにかつ手際よく例外をスローします。

通常、非同期の並行変更がある場合、確かな保証を行うことは不可能なので、イテレータのフェイルファストの動作を保証することはできません。 フェイルファスト・イテレータは、ベスト・エフォート・ベースでConcurrentModificationExceptionをスローします。 したがって、正確を期すためにこの例外に依存するプログラムを書くことは誤りです。イテレータのフェイルファストの動作はバグを検出するためにのみ使用すべきです。

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

導入されたバージョン:
1.2
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    新しい空のセットを作成します。基となるHashMapインスタンスはデフォルトの初期容量(16)および負荷係数(0.75)を持ちます。
    HashSet(int initialCapacity)
    新しい空のセットを作成します。基となるHashMapインスタンスは指定された初期容量およびデフォルトの負荷係数(0.75)を持ちます。
    HashSet(int initialCapacity, float loadFactor)
    新しい空のセットを作成します。基となるHashMapインスタンスは指定された初期容量および指定された負荷係数を持ちます。
    HashSet(Collection<? extends E> c)
    指定されたコレクションの要素を格納する新規セットを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    boolean
    add(E e)
    指定された要素がセットの要素として存在しない場合に、その要素をセットに追加します。
    void
    すべての要素をセットから削除します。
    このHashSetインスタンスのシャロー・コピーを返します。要素自体は複製されません。
    boolean
    指定された要素がこのセットに含まれている場合にtrueを返します。
    boolean
    このセットに要素が1つも含まれていない場合にtrueを返します。
    セット内の各要素についてのイテレータを返します。
    static <T> HashSet<T>
    newHashSet(int numElements)
    予想される要素数に適した新しい空のHashSetを作成します。
    boolean
    指定された要素がこのセットに存在する場合に、要素をセットから削除します。
    int
    セット内の要素数(そのカーディナリティ)を返します。
    このセット内の要素に対する遅延バインディングおよびフェイルファスト Spliteratorを作成します。
    このコレクションの要素がすべて格納されている配列を返します。
    <T> T[]
    toArray(T[] a)
    このコレクション内のすべての要素を保持する配列を返します。返される配列の実行時の型は、指定された配列の型です。

    クラス java.util.AbstractSetで宣言されたメソッド

    equals, hashCode, removeAll

    クラス java.util.AbstractCollectionで宣言されたメソッド

    addAll, containsAll, retainAll, toArray, toArray, toString

    クラス java.lang.Objectで宣言されたメソッド

    finalize, getClass, notify, notifyAll, wait, wait, wait

    インタフェース java.util.Collectionで宣言されたメソッド

    parallelStream, removeIf, stream, toArray

    インタフェース java.lang.Iterableで宣言されたメソッド

    forEach

    インタフェース java.util.Setで宣言されたメソッド

    addAll, containsAll, equals, hashCode, removeAll, retainAll
  • コンストラクタの詳細

    • HashSet

      public HashSet()
      新しい空のセットを作成します。基となるHashMapインスタンスはデフォルトの初期容量(16)および負荷係数(0.75)を持ちます。
    • HashSet

      public HashSet(Collection<? extends E> c)
      指定されたコレクションの要素を格納する新規セットを作成します。 デフォルトの負荷係数(0.75)、および指定されたコレクションの要素を格納するのに十分な初期容量により、HashMapは作成されます。
      パラメータ:
      c - 要素がこのセットに配置されるコレクション
      例外:
      NullPointerException - 指定されたコレクションがnullである場合
    • HashSet

      public HashSet(int initialCapacity, float loadFactor)
      新しい空のセットを作成します。基となるHashMapインスタンスは指定された初期容量および指定された負荷係数を持ちます。
      APIのノート:
      予想される要素数に対応する初期容量を持つHashSetを作成するには、newHashSetを使用します。
      パラメータ:
      initialCapacity - ハッシュ・マップの初期容量
      loadFactor - ハッシュ・マップの負荷係数
      例外:
      IllegalArgumentException - 初期容量がゼロよりも小さい場合、または負荷係数が正でない場合
    • HashSet

      public HashSet(int initialCapacity)
      新しい空のセットを作成します。基となるHashMapインスタンスは指定された初期容量およびデフォルトの負荷係数(0.75)を持ちます。
      APIのノート:
      予想される要素数に対応する初期容量を持つHashSetを作成するには、newHashSetを使用します。
      パラメータ:
      initialCapacity - ハッシュ表の初期容量
      例外:
      IllegalArgumentException - 初期容量がゼロよりも小さい場合
  • メソッドの詳細

    • iterator

      public Iterator<E> iterator()
      セット内の各要素についてのイテレータを返します。 要素が返されるときに特定の順序はありません。
      定義:
      iterator、インタフェースCollection<E>
      定義:
      iterator、インタフェースIterable<E>
      定義:
      iterator、インタフェースSet<E>
      定義:
      iterator、クラスAbstractCollection<E>
      戻り値:
      セットの要素のIterator
      関連項目:
    • size

      public int size()
      セット内の要素数(そのカーディナリティ)を返します。
      定義:
      size、インタフェースCollection<E>
      定義:
      size、インタフェースSet<E>
      戻り値:
      セット内の要素数(そのカーディナリティ)
    • isEmpty

      public boolean isEmpty()
      このセットに要素が1つも含まれていない場合にtrueを返します。
      定義:
      isEmpty、インタフェースCollection<E>
      定義:
      isEmpty、インタフェースSet<E>
      オーバーライド:
      isEmpty、クラスAbstractCollection<E>
      戻り値:
      セットに要素がない場合はtrue
    • contains

      public boolean contains(Object o)
      指定された要素がこのセットに含まれている場合にtrueを返します。 より正式には、このセットにObjects.equals(o, e)のような要素eが含まれている場合に限り、trueを返します。
      定義:
      contains、インタフェースCollection<E>
      定義:
      contains、インタフェースSet<E>
      オーバーライド:
      contains、クラスAbstractCollection<E>
      パラメータ:
      o - このセット内にあるかどうかが判定される要素
      戻り値:
      指定された要素がこのセットに含まれている場合はtrue
    • add

      public boolean add(E e)
      指定された要素がセットの要素として存在しない場合に、その要素をセットに追加します。 Objects.equals(e, e2)のような要素e2がこのセットに含まれていない場合、正式には、指定された要素eをこのセットに追加します。 このセット内にすでにその要素が含まれている場合、この呼出しはセットを変更せずにfalseを返します。
      定義:
      add、インタフェースCollection<E>
      定義:
      add、インタフェースSet<E>
      オーバーライド:
      add、クラスAbstractCollection<E>
      パラメータ:
      e - このセットに追加される要素
      戻り値:
      このセット内に、指定された要素がなかった場合はtrue
    • remove

      public boolean remove(Object o)
      指定された要素がこのセットに存在する場合に、要素をセットから削除します。 より正式には、Objects.equals(o, e)(このセットにこのような要素が含まれている場合)のような要素eを削除します。 その要素がこのセットに含まれていた場合、つまり、呼出しの結果としてこのセットが変更された場合はtrueを返します。 呼出しが復帰したあとは、このセットはその要素を持っていません。
      定義:
      remove、インタフェースCollection<E>
      定義:
      remove、インタフェースSet<E>
      オーバーライド:
      remove、クラスAbstractCollection<E>
      パラメータ:
      o - このセットから削除されるオブジェクト(そのオブジェクトが存在する場合)
      戻り値:
      セットが、指定された要素を保持していた場合はtrue
    • clear

      public void clear()
      すべての要素をセットから削除します。 この呼出しが戻ると、セットは空になります。
      定義:
      clear、インタフェースCollection<E>
      定義:
      clear、インタフェースSet<E>
      オーバーライド:
      clear、クラスAbstractCollection<E>
    • clone

      public Object clone()
      このHashSetインスタンスのシャロー・コピーを返します。要素自体は複製されません。
      オーバーライド:
      clone、クラスObject
      戻り値:
      このセットのシャロー・コピー
      関連項目:
    • spliterator

      public Spliterator<E> spliterator()
      このセット内の要素に対する遅延バインディングおよびフェイルファスト Spliteratorを作成します。

      Spliteratorは、Spliterator.SIZEDおよびSpliterator.DISTINCTを報告します。 オーバーライドする実装は、追加の特性値の報告をドキュメント化する必要があります。

      定義:
      spliterator、インタフェースCollection<E>
      定義:
      spliterator、インタフェースIterable<E>
      定義:
      spliterator、インタフェースSet<E>
      戻り値:
      このセット内の要素に対するSpliterator
      導入されたバージョン:
      1.8
    • toArray

      public Object[] toArray()
      次のクラスからコピーされた説明: AbstractCollection
      このコレクションの要素がすべて格納されている配列を返します。 イテレータによって要素が返される順序をコレクションが保証する場合、このメソッドは同じ順序で要素を返さなければなりません。 返される配列「ランタイム・コンポーネント・タイプ」Objectです。

      返される配列への参照をコレクションが維持しないという点で、この配列は安全です。 つまり、このメソッドは、コレクションが配列に連動している場合でも新しい配列を割り当てます。 このため、呼出し側は、返された配列を自由に変更できます。

      定義:
      toArray、インタフェースCollection<E>
      定義:
      toArray、インタフェースSet<E>
      オーバーライド:
      toArray、クラスAbstractCollection<E>
      戻り値:
      「ランタイム・コンポーネント・タイプ」Objectの配列。このコレクションのすべての要素を含む
    • toArray

      public <T> T[] toArray(T[] a)
      次のクラスからコピーされた説明: AbstractCollection
      このコレクション内のすべての要素を保持する配列を返します。返される配列の実行時の型は、指定された配列の型です。 コレクションが指定された配列に収まる場合は、その中に返されます。 そうでない場合は、指定された配列の実行時の型とコレクションのサイズを持つ新しい配列が割り当てられます。

      このコレクションが指定された配列に収まり、その配列にさらに余裕がある場合(つまり、配列がこのコレクションより多くの要素を持つ場合)、その配列内でコレクションの終端よりあとの要素はnullに設定されます。 このコレクションにnull要素がないことを呼出し側が知っている場合にだけ、この特性を利用してコレクションの長さを判断できます。

      イテレータによって要素が返される順序をコレクションが保証する場合、このメソッドは同じ順序で要素を返さなければなりません。

      定義:
      toArray、インタフェースCollection<E>
      定義:
      toArray、インタフェースSet<E>
      オーバーライド:
      toArray、クラスAbstractCollection<E>
      型パラメータ:
      T - コレクションを格納する配列のコンポーネント型
      パラメータ:
      a - 配列が十分な大きさを持つ場合は、このコレクションの要素の格納先の配列。配列のサイズが十分でない場合は、同じ実行時の型で新しい配列が格納用として割り当てられる。
      戻り値:
      コレクションのすべての要素が格納されている配列
    • newHashSet

      public static <T> HashSet<T> newHashSet(int numElements)
      予想される要素数に適した新しい空のHashSetを作成します。 返されるセットではデフォルトのロード係数0.75が使用され、初期容量は通常十分に大きいため、セットのサイズを変更せずに必要なファクタ数を追加できます。
      型パラメータ:
      T - 新しいセットによって保持される要素のタイプ
      パラメータ:
      numElements - 予想される要素数
      戻り値:
      新しく作成されたセット
      例外:
      IllegalArgumentException - numElementsが負の場合
      導入されたバージョン:
      19