構築時にHashSetを初期化する

構築時のHashSetの初期化

1. 概要

このクイックチュートリアルでは、initializing the HashSet with values, at the time of its constructionのさまざまな方法を紹介します。

代わりに、HashSetの機能を調べる場合は、this core article hereを参照してください。

Javabuilt-in methods since Java 5 and beforeに飛び込み、次に新しいmechanism introduced since Java 8に飛び込みます。 また、custom utility methodが表示され、最後に3rd party collection libraries、特にGoogleGuavaが提供する機能について説明します。

すでにJDK9 +に移行している場合は、collection factory methods.を使用できます。

2. Java組み込みメソッド

3つの組み込みmechanisms available since the Java 5 or beforeを調べることから始めましょう。

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

既存のinstance of another collectionを渡して、Setを初期化できます。 以下の例では、インラインで作成されたListを使用しています。

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

2.2. 匿名クラスを使用する

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

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

したがって、Setを初期化する必要がある頻度に応じて、try to avoid using this approach:を初期化できます。

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

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

JavaのCollections utilityクラスは、singletonという名前のメソッドを提供して、単一の要素でSetを作成します。.singletonメソッドで作成されたSetインスタンスはimmutableであり、これ以上値を追加できないことを意味します。

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

Set set = Collections.singleton("a");

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

static finalメソッドは次のように定義できます。 メソッドaccepts variable arguments

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

method is using genericsなので、任意のタイプの値を渡すことができます。

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

ユーティリティメソッドは、以下のようにコードで使用できます。

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

4. Java 8以降のStreamの使用

Java 8でのStream APIの導入により、追加のオプションがあります。 以下のコードに示すように、Stream with Collectorsを使用できます。

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

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

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

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

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

同様に、以下の例に示すように、Guavaにはimmutable Set instancesを作成するためのユーティリティクラスがあります。

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

6. 結論

結論として、HashSetの構築中に初期化できる複数の方法を見てきました。 これらのアプローチは、必ずしもすべての可能な方法を網羅しているわけではありません。 これは、最も一般的な方法を紹介するための試みでした。

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

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