1.概要

このクイックチュートリアルでは、構築時に

HashSet

を値で初期化するさまざまな方法を紹介します。

代わりに

HashSet

の機能を調べたい場合は、https://www.baeldung.com/java-hashset[このコア記事]を参照してください。

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

カスタムユーティリティメソッド

を見て、最後に

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

、特にGoogle Guavaによって提供される機能を探ります。

すでにJDK9に移行したことがある場合は、https://www.baeldung.com/java-9-collections-factory-methods[collection factory method]を使用することができます。]

2. Javaの組み込みメソッド

Java 5以降

から利用可能な

3つの組み込みメカニズムを調べることから始めましょう。

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


Set

を初期化するために別のコレクションの既存のインスタンスを渡すことができます。以下の例では、インラインで作成された

List

を使用しています。

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. Java 5以降のCollectionsユーティリティメソッドの使用

Javaの


Collections

ユーティリティ

クラスは、単一の要素

__.


を持つ

Set

を作成するための

singleton__というメソッドを提供します。

特に単体テストで、単一の値を持つ

Set

を作成する必要がある状況があります。

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

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

以下のように

static final

メソッドを定義することができます。メソッドは

可変引数

を受け入れます。

コレクションオブジェクトと値の配列を受け付ける

Collections.addAll

を使用することは、値をコピーするオーバーヘッドが少ないため、特に優れています。

  • メソッドは総称** を使用しているので、任意の型の値を渡すことができます。

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 8以降の

Stream

の使用

Java 8で

Stream

APIが導入されたため、追加のオプションがあります。以下のコードに示すように、


Stream



Collectors


を使用できます。

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

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

ほんの数例を挙げると、グーグルグアバ、アパッチコモンズコレクション、エクリプスコレクションを含む複数のサードパーティコレクションライブラリがあります。

これらのライブラリはSetのようなコレクションを初期化するための便利なユーティリティメソッドを提供します。


Google Guava


は、ここで最も一般的に使用されているものの1つです。それ。 Guavaには、可変および不変の

Set

オブジェクト用の便利なメソッドがあります。

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

同様に、Guavaには、以下の例に示すように、

immutable

Set

instance

を作成するためのユーティリティクラスがあります。

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

6.まとめ

結論として、

HashSet

が構築されている間にそれを初期化できる複数の方法を見ました。これらのアプローチは必ずしもすべての可能な方法をカバーするわけではありません。これは、最も一般的な方法を紹介することを目的としたものです。

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

Set

を構築することです。

いつも通りに動作するコード例が利用可能ですhttps://github.com/eugenp/tutorials/tree/master/core-java-collections[over on GitHub]。