構築時にHashSetを初期化する
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]。