Java : HashSet (ハッシュセット) - API使用例

HashSet (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

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

クラス構成

HashSet は、ハッシュ表による Set の実装です。
セットの順序は保証されません。

パフォーマンスがよいので、Set の実装ではよく使われていると思います。

final var set = new HashSet<String>();
System.out.println(set); // []
System.out.println(set.isEmpty()); // true

set.add("a");
set.add("b");
set.add("c");

System.out.println(set); // [a, b, c]
System.out.println(set.size()); // 3

System.out.println(set.contains("a")); // true
System.out.println(set.contains("b")); // true
System.out.println(set.contains("X")); // false

関連記事:Set(セット)の基本

コンストラクタ

HashSet ()

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

final var set = new HashSet<String>();
System.out.println(set); // []
System.out.println(set.isEmpty()); // true

set.add("a");
set.add("b");
set.add("c");

System.out.println(set); // [a, b, c]
System.out.println(set.size()); // 3

HashSet (int initialCapacity)

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

初期容量を変えて処理時間を計った例です。
(実行する環境によって変わる可能性があります)

final var set = new HashSet<String>(10000000);
System.out.println(set); // []

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    set.add(String.valueOf(i));
}

final var endTime = System.nanoTime();

// 0.125983 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);
final var set = new HashSet<String>(1);
System.out.println(set); // []

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    set.add(String.valueOf(i));
}

final var endTime = System.nanoTime();

// 0.170036 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);

HashSet (int initialCapacity, float loadFactor)

新しい空のセットを作成します。基となるHashMapインスタンスは指定された初期容量および指定された負荷係数を持ちます。

負荷係数を変えて処理時間を計った例です。
(実行する環境によって変わる可能性があります)

final var set = new HashSet<String>(16, 0.05f);
System.out.println(set); // []

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    set.add(String.valueOf(i));
}

final var endTime = System.nanoTime();

// 0.260103 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);
final var set = new HashSet<String>(16, 0.75f);
System.out.println(set); // []

final var startTime = System.nanoTime();

for (int i = 0; i < 1000000; i++) {
    set.add(String.valueOf(i));
}

final var endTime = System.nanoTime();

// 0.173419 sec.
System.out.printf("%f sec.%n", (endTime - startTime) / 1000000000.0);

HashSet (Collection<? extends E> c)

指定されたコレクションの要素を格納する新規セットを作成します。

final var c = List.of("a", "b", "c");

final var set = new HashSet<>(c);
System.out.println(set); // [a, b, c]
System.out.println(set.size()); // 3

メソッド

boolean add (E e)

指定された要素がセットの要素として存在しない場合に、その要素をセットに追加します。

final var set = new HashSet<String>();
System.out.println(set); // []

System.out.println(set.add("a")); // true
System.out.println(set); // [a]

System.out.println(set.add("b")); // true
System.out.println(set); // [a, b]

System.out.println(set.add("c")); // true
System.out.println(set); // [a, b, c]

System.out.println(set.add("a")); // false
System.out.println(set); // [a, b, c]

void clear ()

すべての要素をセットから削除します。

final var set = new HashSet<String>();
System.out.println(set); // []

set.add("a");
System.out.println(set); // [a]

set.add("b");
System.out.println(set); // [a, b]

set.clear();
System.out.println(set); // []

Object clone ()

このHashSetインスタンスのシャロー・コピーを返します。要素自体は複製されません。

final var set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");

System.out.println(set); // [a, b, c]

final var cloned = set.clone();
System.out.println(cloned); // [a, b, c]
System.out.println(cloned.getClass()); // class java.util.HashSet

boolean contains (Object o)

指定された要素がこのセットに含まれている場合にtrueを返します。

final var set = new HashSet<String>();
Collections.addAll(set, "a", "b", "c");
System.out.println(set); // [a, b, c]

System.out.println(set.contains("")); // false
System.out.println(set.contains("a")); // true
System.out.println(set.contains("b")); // true
System.out.println(set.contains("c")); // true

System.out.println(set.contains("X")); // false
System.out.println(set.contains("abc")); // false

boolean isEmpty ()

このセットに要素が1つも含まれていない場合にtrueを返します。

final var set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");

System.out.println(set); // [a, b, c]
System.out.println(set.isEmpty()); // false

set.clear();
System.out.println(set); // []
System.out.println(set.isEmpty()); // true

Iterator<E> iterator ()

セット内の各要素についてのイテレータを返します。

final var set = new HashSet<String>();
Collections.addAll(set, "aaa", "bbb", "ccc");
System.out.println(set); // [aaa, ccc, bbb]

set.iterator().forEachRemaining(System.out::println);

// 結果
// ↓
//aaa
//ccc
//bbb

boolean remove (Object o)

指定された要素がこのセットに存在する場合に、要素をセットから削除します。

final var src = Set.of("a", "b", "c");

{
    final var set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.remove("")); // false
    System.out.println(set); // [a, b, c]
}
{
    final var set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.remove("a")); // true
    System.out.println(set); // [b, c]
}
{
    final var set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.remove("b")); // true
    System.out.println(set); // [a, c]
}
{
    final var set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.remove("X")); // false
    System.out.println(set); // [a, b, c]
}

int size ()

セット内の要素数(そのカーディナリティ)を返します。

final var set1 = new HashSet<String>();
System.out.println(set1); // []
System.out.println(set1.size()); // 0

final var set2 = new HashSet<String>();
Collections.addAll(set2, "a", "b", "c");
System.out.println(set2); // [a, b, c]
System.out.println(set2.size()); // 3

Spliterator<E> spliterator ()

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

final var set = new HashSet<String>();
Collections.addAll(set, "aaa", "bbb", "ccc");
System.out.println(set); // [aaa, ccc, bbb]

final var spliterator = set.spliterator();
spliterator.forEachRemaining(System.out::println);

// 結果
// ↓
//aaa
//ccc
//bbb

Object[] toArray ()

このコレクションの要素がすべて格納されている配列を返します。

final var set = new HashSet<String>();
Collections.addAll(set, "a", "b", "c");
System.out.println(set); // [a, b, c]

final Object[] array = set.toArray();
System.out.println(Arrays.toString(array)); // [a, b, c]

<T> T[] toArray (T[] a)

このコレクション内のすべての要素を保持する配列を返します。返される配列の実行時の型は、指定された配列の型です。

final var set = new HashSet<String>();
Collections.addAll(set, "a", "b", "c");
System.out.println(set); // [a, b, c]

final String[] ret = set.toArray(new String[0]);
System.out.println(Arrays.toString(ret)); // [a, b, c]
final var set = new HashSet<String>();
Collections.addAll(set, "a", "b", "c");
System.out.println(set); // [a, b, c]

{
    final String[] array = new String[3];
    System.out.println(Arrays.toString(array)); // [null, null, null]

    final var ret = set.toArray(array);
    System.out.println(Arrays.toString(array)); // [a, b, c]
    System.out.println(Arrays.toString(ret)); // [a, b, c]
}
{
    final String[] array = new String[5];
    System.out.println(Arrays.toString(array)); // [null, null, null, null, null]

    final var ret = set.toArray(array);
    System.out.println(Arrays.toString(array)); // [a, b, c, null, null]
    System.out.println(Arrays.toString(ret)); // [a, b, c, null, null]
}
{
    final String[] array = new String[1];
    System.out.println(Arrays.toString(array)); // [null]

    final var ret = set.toArray(array);
    System.out.println(Arrays.toString(array)); // [null]
    System.out.println(Arrays.toString(ret)); // [a, b, c]
}

AbstractSetで宣言されたメソッド

equals, hashCode, removeAll

Java API 使用例 : AbstractSet」をご参照ください。

AbstractCollectionで宣言されたメソッド

addAll, containsAll, retainAll, toArray, toArray, toString

Java API 使用例 : AbstractCollection」をご参照ください。

Collectionで宣言されたメソッド

parallelStream, removeIf, stream, toArray

Java API 使用例 : Collection」をご参照ください。

Iterableで宣言されたメソッド

forEach

Java API 使用例 : Iterable」をご参照ください。

Setで宣言されたメソッド

addAll, containsAll, equals, hashCode, removeAll, retainAll

Java API 使用例 : Set」をご参照ください。


関連記事

ページの先頭へ