JavaのHashSetクラスとは?使い方とサンプルコードを解説
HashSetとは
HashSetは、AbstractSetクラスを継承し、Setインターフェースを実装したコレクションクラスです。内部的にはハッシュテーブルを使用して要素を格納します。
ハッシュテーブルは「ハッシュ化(hashing)」と呼ばれる仕組みによって情報を管理します。ハッシュ化では、キーの内容をもとに「ハッシュコード」と呼ばれる一意の値が算出されます。
このハッシュコードがインデックスとして利用され、キーに関連付けられたデータがその位置に格納されます。キーからハッシュコードへの変換は自動的に行われるため、開発者が意識する必要はありません。
HashSetの主な特徴
- 重複した要素は格納できない
- 要素の順序は保証されない
- 追加・削除・検索などの基本操作が高速(平均O(1))
例1:HashSetへの要素追加
まず、JavaでHashSetを作成し、要素を追加する基本的な例を見てみましょう。
import java.util.*;
public class Demo {
public static void main(String args[]) {
HashSet <String> hashSet = new HashSet <String>();
hashSet.add("One");
hashSet.add("Two");
hashSet.add("Three");
hashSet.add("Four");
hashSet.add("Five");
hashSet.add("Six");
System.out.println("Hash set values = "+ hashSet);
}
}実行結果
Hash set values = [Five, Six, One, Four, Two, Three]
出力結果を見ると、要素を追加した順序とは異なる順序で表示されています。これは、HashSetが要素の順序を保証しないためです。
例2:HashSetから要素を削除する
次に、remove()メソッドを使ってHashSetから要素を削除する例を見てみましょう。
import java.util.*;
public class Demo {
public static void main(String args[]) {
HashSet <String> newset = new HashSet <String>();
newset.add("Learning");
newset.add("Easy");
newset.add("Simply");
System.out.println("Values before remove: "+newset);
boolean isremoved = newset.remove("Easy");
System.out.println("Return value after remove: "+isremoved);
System.out.println("Values after remove: "+newset);
}
}実行結果
Values before remove: [Learning, Easy, Simply] Return value after remove: true Values after remove: [Learning, Simply]
remove()メソッドは、指定した要素の削除に成功するとtrueを返します。存在しない要素を指定した場合はfalseが返されるため、戻り値を確認することで削除の成否を判定できます。
-
Javaでカウンタープログラムを実装する方法をわかりやすく解説
この記事では、JavaのSwingを使ってシンプルなカウンター(数を数える)アプリケーションを実装する方法を解説します。このプログラムでは、JLabelでカウント用のラベルを表示し、JTextFieldで現在のカウント値を保持し、JButtonで「追加(Add)」「削除(Remove)」「リセット(Reset)」の3つのボタンを作成します。 「Add」ボタンをクリックするとJTextField内のカウントが1ずつ増加し、「Remove」ボタンをクリックすると1ずつ減少します。さらに「Reset」ボタンをクリックすると、カウントは0にリセットされます。 実装例 import java.awt.*
-
Java Swingのアーキテクチャとは?特徴とMVCモデルをわかりやすく解説
Java Swingは、Javaプログラム向けにグラフィカルユーザーインターフェース(GUI)を提供するAPI群です。Java Swingは、それ以前のAPIであるAbstract Window Toolkit(AWT)をベースに開発されました。AWTと比べて、より豊富で洗練されたGUIコンポーネントを備えており、シンプルな部品から複雑なツリーやテーブルまで幅広く利用できます。さらに、プラグイン可能なルック&フィール(Pluggable Look and Feel)機能により、Javaプログラムの外観を基盤となるプラットフォームから独立して制御できる点も大きな特長です。 Java Swingの