構築時の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で利用できます。