1. 概要

このクイックチュートリアルでは、構築時に値を使用してHashSetを初期化するさまざまな方法を紹介します。

代わりに、 HashSet の機能を調べるには、このコア記事を参照してください。

Javaに飛び込みます組み込みメソッド Java5以降 、続いて新しい Java8以降に導入されたメカニズム。

また、カスタムユーティリティメソッドを確認し、最後にサードパーティコレクションライブラリ、特にGoogleGuavaが提供する機能について説明します。

すでにJDK9+に移行している場合は、コレクションファクトリメソッドを使用できます。

2. Java組み込みメソッド

Java5以前から利用可能な3つの組み込みメカニズムを調べることから始めましょう。

2.1. 別のコレクションインスタンスの使用

別のコレクションの既存のインスタンスを渡して、Setを初期化できます。

ここでは、インラインで作成されたリストを使用しています。

Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c"));

2.2. 匿名クラスの使用

さらに別のアプローチでは、匿名クラスを使用してHashSetに要素を追加できます。

二重中括弧の使用に注意してください。 このアプローチは、呼び出されるたびに匿名クラスを作成するため、技術的に非常に高価です

したがって、 Set を初期化する必要がある頻度に応じて、このアプローチの使用を回避することができます。

Set<String> set = new HashSet<String>(){{
    add("a");
    add("b");
    add("c");
}};

2.3. Java5以降のコレクションユーティリティメソッドの使用

JavaのCollectionsユーティリティクラスは、 singleton という名前のメソッドを提供して、単一の要素を持つSetを作成します。[X152X シングルトンメソッドで作成された]Setインスタンスは、不変です。つまり、これ以上値を追加することはできません。

特に単体テストでは、単一の値でSetを作成する必要がある状況があります。

Set<String> set = Collections.singleton("a");

3. カスタムユーティリティメソッドの定義

staticfinalメソッドは次のように定義できます。 メソッドは可変引数を受け入れます。

コレクションオブジェクトと値の配列を受け入れるCollections.addAllを使用すると、値をコピーするオーバーヘッドが低いため、特にが最適です。

メソッドはgenericsを使用するため、任意のタイプの値を渡すことができます。

public static final <T> Set<T> newHashSet(T... objs) {
    Set<T> set = new HashSet<T>();
    Collections.addAll(set, objs);
    return set;
}

コードでユーティリティメソッドを使用する方法は次のとおりです。

Set<String> set = newHashSet("a","b","c");

4. Java以降のStreamの使用8

Java8でのStream APIの導入により、 Stream withCollectorsなどの追加オプションがあります。

Set<String> set = Stream.of("a", "b", "c")
  .collect(Collectors.toCollection(HashSet::new));

5. サードパーティのコレクションライブラリの使用

ほんの数例を挙げると、Google Guava、Apache Commons Collections、EclipseCollectionsなどの複数のサードパーティコレクションライブラリがあります。

これらのライブラリは、Setなどのコレクションを初期化するための便利なユーティリティメソッドを提供します。 Google Guava は最も一般的に使用されているものの1つであるため、その例を示しました。

Guavaには、可変および不変のSetオブジェクト用の便利なメソッドがあります。

Set<String> set = Sets.newHashSet("a", "b", "c");

同様に、Guavaには、不変のSetインスタンスを作成するためのユーティリティクラスがあります。

Set<String> set = ImmutableSet.of("a", "b", "c");

6. 結論

この記事では、HashSetの構築中に初期化できる複数の方法を見てきました。

これらのアプローチは、必ずしもすべての可能な方法を網羅しているわけではありません。 この記事は、最も一般的な方法を紹介するための試みにすぎません。

たとえば、ここで取り上げていないアプローチの1つは、オブジェクトビルダーを使用してSetを作成することです。

いつものように、動作するコード例はGitHub利用できます。