Java – HashSetを初期化する方法まとめ
JavaでHashSetを初期化する方法にはいくつかの選択肢があります。
new HashSet<>()を使用して空のセットを作成し、add()メソッドで要素を追加するのが基本です。
初期値を一度に設定する場合は、Arrays.asList()を使いnew HashSet<>(Arrays.asList("A", "B", "C"))のように記述します。
また、Java 9以降ではSet.of("A", "B", "C")を利用して不変セットを作成し、それをHashSetに変換する方法もあります。
HashSetの初期化方法
JavaのHashSetは、重複を許さないコレクションであり、要素の順序を保持しません。
HashSetを初期化する方法はいくつかあります。
以下に代表的な初期化方法を示します。
| 初期化方法 | 説明 | 
|---|---|
| デフォルトコンストラクタ | 空の HashSetを作成する。 | 
| サイズ指定コンストラクタ | 初期サイズを指定して HashSetを作成する。 | 
| コレクションからの初期化 | 他のコレクションの要素を使って初期化する。 | 
| 配列からの初期化 | 配列の要素を使って HashSetを初期化する。 | 
デフォルトコンストラクタを使用した初期化
デフォルトコンストラクタを使用すると、空のHashSetを作成できます。
以下はそのサンプルコードです。
import java.util.HashSet;
public class App {
    public static void main(String[] args) {
        // 空のHashSetを初期化
        HashSet<String> hashSet = new HashSet<>(); 
        
        // 要素を追加
        hashSet.add("りんご");
        hashSet.add("ばなな");
        
        // 出力
        System.out.println(hashSet);
    }
}[ばなな, りんご]サイズ指定コンストラクタを使用した初期化
初期サイズを指定してHashSetを作成することもできます。
これにより、パフォーマンスを向上させることができます。
以下はそのサンプルコードです。
import java.util.HashSet;
public class App {
    public static void main(String[] args) {
        // 初期サイズ10のHashSetを初期化
        HashSet<String> hashSet = new HashSet<>(10); 
        
        // 要素を追加
        hashSet.add("オレンジ");
        hashSet.add("ぶどう");
        
        // 出力
        System.out.println(hashSet);
    }
}[オレンジ, ぶどう]コレクションからの初期化
他のコレクション(例えば、ArrayList)から要素を使ってHashSetを初期化することも可能です。
以下はそのサンプルコードです。
import java.util.ArrayList;
import java.util.HashSet;
public class App {
    public static void main(String[] args) {
        // ArrayListを作成
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("さくらんぼ");
        arrayList.add("もも");
        
        // ArrayListからHashSetを初期化
        HashSet<String> hashSet = new HashSet<>(arrayList); 
        
        // 出力
        System.out.println(hashSet);
    }
}[もも, さくらんぼ]配列からの初期化
配列の要素を使ってHashSetを初期化することもできます。
以下はそのサンプルコードです。
import java.util.HashSet;
import java.util.Arrays;
public class App {
    public static void main(String[] args) {
        // 配列を作成
        String[] fruits = {"いちご", "パイナップル"};
        
        // 配列からHashSetを初期化
        HashSet<String> hashSet = new HashSet<>(Arrays.asList(fruits)); 
        
        // 出力
        System.out.println(hashSet);
    }
}[いちご, パイナップル]これらの方法を使うことで、HashSetを柔軟に初期化することができます。
必要に応じて適切な方法を選択してください。
Java 9以降の便利な初期化方法
Java 9以降では、HashSetを初期化するための新しい便利な方法が追加されました。
これにより、より簡潔にHashSetを作成することが可能になりました。
以下にその方法を紹介します。
List.of()を使用した初期化
Java 9では、List.of()メソッドを使用して、簡単に不変のリストを作成できます。
このリストをHashSetの初期化に利用することができます。
以下はそのサンプルコードです。
import java.util.HashSet;
import java.util.List;
public class App {
    public static void main(String[] args) {
        // List.of()を使用してHashSetを初期化
        HashSet<String> hashSet = new HashSet<>(List.of("りんご", "ばなな", "オレンジ")); 
        
        // 出力
        System.out.println(hashSet);
    }
}[ばなな, オレンジ, りんご]Stream APIを使用した初期化
Java 9以降では、Streamを使用してHashSetを初期化することもできます。
これにより、より柔軟な初期化が可能になります。
以下はそのサンプルコードです。
import java.util.HashSet;
import java.util.stream.Stream;
public class App {
    public static void main(String[] args) {
        // Streamを使用してHashSetを初期化
        HashSet<String> hashSet = Stream.of("さくらんぼ", "もも", "ぶどう")
                                        .collect(HashSet::new, HashSet::add, HashSet::addAll); 
        
        // 出力
        System.out.println(hashSet);
    }
}[もも, さくらんぼ, ぶどう]Set.of()を使用した初期化
Java 9では、Set.of()メソッドを使用して、簡単に不変のセットを作成することもできます。
このメソッドを使うと、HashSetを直接初期化することができます。
以下はそのサンプルコードです。
import java.util.HashSet;
import java.util.Set;
public class App {
    public static void main(String[] args) {
        // Set.of()を使用してHashSetを初期化
        Set<String> set = Set.of("いちご", "パイナップル", "キウイ");
        HashSet<String> hashSet = new HashSet<>(set); 
        
        // 出力
        System.out.println(hashSet);
    }
}[いちご, パイナップル, キウイ]これらの新しい初期化方法を利用することで、HashSetの作成がより簡単かつ効率的になります。
特に、List.of()やSet.of()を使用することで、コードがシンプルになり、可読性が向上します。
必要に応じてこれらの方法を活用してください。
初期化時の注意点
HashSetを初期化する際には、いくつかの注意点があります。
これらを理解しておくことで、意図しない動作を避け、効率的にコレクションを扱うことができます。
以下に主な注意点を示します。
重複要素の扱い
- HashSetは重複を許さないため、同じ要素を追加しても1つだけが保持されます。
- 例えば、以下のように初期化した場合、重複した要素は無視されます。
import java.util.HashSet;
public class App {
    public static void main(String[] args) {
        HashSet<String> hashSet = new HashSet<>();
        hashSet.add("りんご");
        hashSet.add("りんご"); // 重複要素
        
        // 出力
        System.out.println(hashSet); // [りんご]
    }
}初期サイズの設定
- HashSetの初期サイズを設定することで、パフォーマンスを向上させることができます。
- 初期サイズを小さく設定しすぎると、要素が追加されるたびに内部の配列が再サイズされ、パフォーマンスが低下する可能性があります。
不変のコレクションからの初期化
- Set.of()や- List.of()を使用して作成した不変のコレクションから- HashSetを初期化する場合、元のコレクションは変更できません。
- そのため、初期化後に要素を追加したり削除したりすることはできません。
以下はその例です。
import java.util.HashSet;
import java.util.Set;
public class App {
    public static void main(String[] args) {
        Set<String> immutableSet = Set.of("いちご", "パイナップル");
        HashSet<String> hashSet = new HashSet<>(immutableSet);
        
        // 追加しようとするとUnsupportedOperationExceptionが発生する
        // immutableSet.add("キウイ"); // エラー
        
        // 出力
        System.out.println(hashSet); // [いちご, パイナップル]
    }
}スレッドセーフではない
- HashSetはスレッドセーフではないため、複数のスレッドから同時にアクセスする場合は注意が必要です。
- スレッドセーフなコレクションが必要な場合は、Collections.synchronizedSet()を使用するか、ConcurrentHashMapなどの他のコレクションを検討してください。
null要素の扱い
- HashSetは- nullを要素として持つことができますが、- nullを複数追加すると、1つだけが保持されます。
- 例えば、以下のように初期化した場合、nullは1つだけ保持されます。
import java.util.HashSet;
public class App {
    public static void main(String[] args) {
        HashSet<String> hashSet = new HashSet<>();
        hashSet.add(null); // nullを追加
        hashSet.add(null); // 再度nullを追加
        
        // 出力
        System.out.println(hashSet); // [null]
    }
}これらの注意点を理解しておくことで、HashSetをより効果的に利用することができます。
初期化時には、これらのポイントを考慮して適切な方法を選択してください。
実践的な初期化例
ここでは、HashSetの初期化を実際のシナリオに基づいて示します。
さまざまな初期化方法を用いた具体的な例を通じて、HashSetの使い方を理解しましょう。
例1: ユーザーの好きな果物を管理する
ユーザーが好きな果物をHashSetで管理する場合、初期化時に複数の果物を追加することができます。
以下はそのサンプルコードです。
import java.util.HashSet;
import java.util.List;
public class App {
    public static void main(String[] args) {
        // List.of()を使用してHashSetを初期化
        HashSet<String> favoriteFruits = new HashSet<>(List.of("りんご", "ばなな", "オレンジ", "りんご")); 
        
        // 出力
        System.out.println("好きな果物: " + favoriteFruits);
    }
}好きな果物: [ばなな, りんご, オレンジ]例2: 商品の在庫管理
商品名をHashSetで管理し、重複を避けることで在庫の一意性を保つことができます。
以下はそのサンプルコードです。
import java.util.HashSet;
public class App {
    public static void main(String[] args) {
        // 空のHashSetを初期化
        HashSet<String> inventory = new HashSet<>(); 
        
        // 商品を追加
        inventory.add("ノートパソコン");
        inventory.add("スマートフォン");
        inventory.add("タブレット");
        inventory.add("ノートパソコン"); // 重複商品
        
        // 出力
        System.out.println("在庫商品: " + inventory);
    }
}在庫商品: [タブレット, スマートフォン, ノートパソコン]例3: 学生の科目選択
学生が選択した科目をHashSetで管理し、重複を避けることができます。
以下はそのサンプルコードです。
import java.util.HashSet;
import java.util.Arrays;
public class App {
    public static void main(String[] args) {
        // 配列からHashSetを初期化
        String[] subjects = {"数学", "英語", "科学", "英語"};
        HashSet<String> selectedSubjects = new HashSet<>(Arrays.asList(subjects)); 
        
        // 出力
        System.out.println("選択した科目: " + selectedSubjects);
    }
}選択した科目: [科学, 数学, 英語]例4: ユーザーのアクセス権限管理
ユーザーのアクセス権限をHashSetで管理することで、重複を避けつつ、効率的に権限を管理できます。
以下はそのサンプルコードです。
import java.util.HashSet;
public class App {
    public static void main(String[] args) {
        // 空のHashSetを初期化
        HashSet<String> userPermissions = new HashSet<>(); 
        
        // 権限を追加
        userPermissions.add("READ");
        userPermissions.add("WRITE");
        userPermissions.add("DELETE");
        userPermissions.add("READ"); // 重複権限
        
        // 出力
        System.out.println("ユーザーの権限: " + userPermissions);
    }
}ユーザーの権限: [DELETE, WRITE, READ]これらの実践的な例を通じて、HashSetの初期化方法やその利用方法を理解することができます。
状況に応じて適切な初期化方法を選択し、効果的にコレクションを管理しましょう。
まとめ
この記事では、JavaのHashSetを初期化するさまざまな方法について詳しく解説しました。
特に、Java 9以降の新しい初期化方法や、実際のシナリオに基づいた具体的な例を通じて、HashSetの効果的な利用法を紹介しました。
これらの知識を活用して、コレクションの管理やデータの整理をより効率的に行ってみてください。
 
![[Java] Mapの要素を比較する方法まとめ](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51222.png)
![[Java] Mapに要素を追加する方法まとめ](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51221.png)
![[Java] Mapに要素(キー・値)が存在するか調べる方法](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51220.png)
![[Java] Mapに重複した値を持つキーを削除する方法](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51207.png)
![[Java] Mapから要素を検索する方法まとめ](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51217.png)
![[Java] Mapに追加した要素の順序を維持する方法](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51211.png)
![[Java] Mapの使い方をわかりやすく解説](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51206.png)
![[Java] Mapのループ中に要素を削除するとエラーになる原因と対処法](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51205.png)
![[Java] Mapからキーを指定して削除する方法](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51204.png)
![[Java] Streamを使ってMapをソートする方法](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51196.png)
![[Java] Mapにキーがあるか検索する方法を解説](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51195.png)
![[Java] Mapから要素を削除する方法 – remove(), clear(), removeIf(), Iterator](https://af-e.net/wp-content/uploads/2024/11/thumbnail-51218.png)