構築時のHashSetの初期化
1. 概要
このクイックチュートリアルでは、構築時に値を使用してHashSetを初期化するさまざまな方法を紹介します。
代わりに、 HashSet の機能を調べるには、このコア記事を参照してください。
Javaに飛び込みます組み込みメソッド Java5以降 、続いて新しい
また、カスタムユーティリティメソッドを確認し、最後にサードパーティコレクションライブラリ、特に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で利用できます。