Java HashSet クラス:初心者のガイド
はじめに
こんにちは、未来のJava開発者たち!今日は、Javaの素晴らしい世界であるHashSetについて深く掘り下げていきます。プログラミングが初めての方でも心配しないでください。私がこれまで教えた無数の学生たちにも同じように、一歩一歩お手本に导いていきます。HashSetを、ユニークなアイテムを保存できる魔法の箱だと思ってください。重複は許されません!それは、各種の靴を一つずつ入れられる特別な引き出しのようです。では始めましょう!
クラス宣言
Javaでは、HashSetはJava Collections Frameworkの一部です。それを使用するには、まずインポートする必要があります。
import java.util.HashSet;
HashSetの基本的な宣言は以下のようになります:
HashSet<E> hs = new HashSet<E>();
ここで、'E'はHashSetに保存したい要素の型の占位符です。例えば、文字列を保存したい場合:
HashSet<String> fruitBasket = new HashSet<String>();
パラメータ
HashSetを作成する際、2つのオプションのパラメータを指定することができます:
- 初期キャパシティ:HashSetが要素を保存するために使用する"バケツ"の数。
- 負荷係数:HashSetが自動的にサイズが拡大されるまでの満杯度の測定。
今はこれらについて深く考えなくても構いません。それらは、魔法の箱の高度な設定と思ってください!
クラスコンストラクタ
HashSetは4つのコンストラクタを提供します。それぞれを見ていきましょう:
// コンストラクタ1:デフォルトの初期キャパシティ(16)と負荷係数(0.75)で空のHashSetを作成
HashSet<String> set1 = new HashSet<>();
// コンストラクタ2:指定されたコレクションの要素を含むHashSetを作成
Collection<String> collection = Arrays.asList("Apple", "Banana", "Cherry");
HashSet<String> set2 = new HashSet<>(collection);
// コンストラクタ3:指定された初期キャパシティとデフォルトの負荷係数(0.75)で空のHashSetを作成
HashSet<String> set3 = new HashSet<>(20);
// コンストラクタ4:指定された初期キャパシティと負荷係数で空のHashSetを作成
HashSet<String> set4 = new HashSet<>(20, 0.8f);
クラスメソッド
以下は、最も一般的に使用されるHashSetメソッドの一覧です:
メソッド | 説明 |
---|---|
add(E e) | このセットに指定された要素がまだ存在しない場合、その要素をこのセットに追加 |
clear() | このセットからすべての要素を削除 |
contains(Object o) | このセットに指定された要素が存在する場合はtrueを返す |
isEmpty() | このセットに要素がない場合はtrueを返す |
remove(Object o) | このセットに指定された要素が存在する場合、その要素をこのセットから削除 |
size() | このセットにある要素の数を返す |
継承されたメソッド
HashSetは親クラスからメソッドを継承します。注目すべきものには以下の通りです:
- Setから:addAll(), containsAll(), equals(), hashCode(), removeAll(), retainAll()
- Collectionから:iterator(), toArray()
- Objectから:clone(), finalize(), getClass(), notify(), notifyAll(), wait()
HashSetに要素を追加する例
さあ、知識を実践して楽しい例を見ていきましょう。アイスクリーム店でユニークなアイスクリームのフレーバーを管理するプログラムを作成していると想象してください:
import java.util.HashSet;
public class IceCreamShop {
public static void main(String[] args) {
// アイスクリームのフレーバーを保存する新しいHashSetを作成
HashSet<String> flavors = new HashSet<>();
// いくつかのフレーバーを追加
flavors.add("バニラ");
flavors.add("チョコレート");
flavors.add("ストロベリー");
flavors.add("ミントチップ");
// デュプリケートを追加しようとする
boolean added = flavors.add("バニラ");
System.out.println("バニラを再度追加? " + added);
System.out.println("私たちのアイスクリームのフレーバー:" + flavors);
System.out.println("私たちには " + flavors.size() + " 種類のユニークなフレーバーがあります!");
// 特定のフレーバーをお持ちしているか確認
String searchFlavor = "ロッキーロード";
if (flavors.contains(searchFlavor)) {
System.out.println("はい、私たちには " + searchFlavor + " があります!");
} else {
System.out.println(searchFlavor + " はおりません。");
}
// フレーバーを削除
flavors.remove("ストロベリー");
System.out.println("ストロベリーを削除した後の更新されたフレーバー:" + flavors);
}
}
出力
このプログラムを実行すると、以下のような出力が表示されます:
バニラを再度追加? false
私たちのアイスクリームのフレーバー:[バニラ, ミントチップ, チョコレート, ストロベリー]
私たちには 4 種類のユニークなフレーバーがあります!
ロッキーロードはおりません。
ストロベリーを削除した後の更新されたフレーバー:[バニラ, ミントチップ, チョコレート]
何が起こったかを分解してみましょう:
- アイスクリームのフレーバーを保存するためのHashSetを
flavors
として作成しました。 - バニラ、チョコレート、ストロベリー、ミントチップの4つのフレーバーを追加しました。
- バニラを再度追加しようとしましたが、HashSetは重複を許さないため
add()
はfalse
を返しました。 - 全てのフレーバーを印刷しました。追加した順序とは異なるかもしれないことに注意してください - HashSetは挿入順序を保持しません。
-
contains()
を使用してロッキーロードフレーバーをお持ちしているか確認しました。おらず、その結果 "おりません" メッセージを印刷しました。 - 最後に、ストロベリーを削除し、更新されたフレーバーのセットを印刷しました。
それでおしまい!初めてのHashSetを作成し、その主要なメソッドのいくつかを使用しました。覚えておきましょう、HashSetはユニークな要素を保存する必要があり、順序が気にしない場合に非常に役立ちます。それは、それぞれ異なる色のビー玉を持つ袋のようなもので、特定の色を持っているかどうかは簡単に確認できますが、袋をひっくり返してビー玉が出てくる順序を制御できないのと同じです。
Javaの旅を続ける中で、HashSetは多くの状況で非常に便利に使えることがわかります。まいりました、すぐにHashSetのプロになるでしょう!幸せなコーディング!
Credits: Image by storyset