本文へスキップ
BecomeCoder

Javaオブジェクト指向コース · 第6章 コレクション ― たくさんのデータをまとめて扱う · レッスン24

HashSet ― 重複のない集合

ブラウザで完結

導入

「参加者の一覧を作りたいが、同じ人が2回登録されても1人として数えたい」——このように 重複を許さない 集合を扱いたいときは HashSet が向いています。

説明

import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        HashSet<String> visitors = new HashSet<>();
        visitors.add("たろう");
        visitors.add("はなこ");
        visitors.add("たろう");   // 重複は無視される

        System.out.println(visitors.size());
        System.out.println(visitors.contains("たろう"));
        visitors.remove("たろう");
        System.out.println(visitors.contains("たろう"));
    }
}

"たろう" を2回 add していますが、HashSet同じ値を2つ持てない ため、実際に入っているのは "たろう""はなこ" の2件だけです。.contains().remove() の使い方は ArrayList と同じです。

やってみよう

下のエディタで同じ値を何度も add してみて、size() が増えないことを確認しましょう。

演習

HashSet<Integer> nums を作り、1223 を順番に追加してください(2が重複しています)。最終的な size() を表示してください。

ヒント1を見る

HashSet<Integer> nums = new HashSet<>(); を作り、nums.add(1); nums.add(2); nums.add(2); nums.add(3); とします。

ヒント2を見る

2 は重複しているので無視され、実際に入っているのは 1, 2, 3 の3件です。System.out.println(nums.size());

実際に動かしてみよう

下のエディタにJavaを書いて「実行」を押すと、学習用シミュレータが System.out.println の出力を表示します(本物のJVMではなく、教材の範囲を再現した軽量エンジンです)。クラス・継承・コレクションなども動きます。Scanner で入力を読む例は「標準入力」欄に値を入れてください。本文の例を書き換えて動かしてみましょう(Stream・ラムダ・スレッド・ファイル入出力など一部の機能は対象外です)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。