JavaのHashSetクラスの使い方のサンプルです。
| 確認環境 ・Java 8 |
目次
- HashSetクラス
- Setインターフェース
- 要素を追加する (addメソッド)
- 要素数を取得する (sizeメソッド)
- 指定の要素があるかを返す (containsメソッド)
- 中身が空かを返す (isEmptyメソッド)
- 要素を削除する (removeメソッド)
- すべての要素を削除する (clearメソッド)
- セットを連結する (addAllメソッド)
- メソッドの引数/戻り値がセットの場合
- 要素を順番に処理する(forEachメソッド)
HashSetクラス

- 1つの変数で複数の値を保持できます。
- 値の重複が許されていません。
- 並び順序は保証されていません。
- 要素の追加や検索は速いです。
- スレッドセーフではありません。
- 以下はJava8 API仕様のHashSetクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/HashSet.html
Setインターフェース
- HashSetクラスはSetインターフェースを実装しています。
- HashSetクラスをインスタンス化する時、HashSetクラス独自のメソッドを使用しない限り、通常Setインターフェイス型の変数に代入します。
- HashSetクラスは、Setインターフェースを実装しているので、Setインターフェイスにあるメソッドを使用できます。
- 以下はJava8 API仕様のSetインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Set.html
要素を追加する (addメソッド)
要素を追加するサンプルです。
package test1;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Set<String> color = new HashSet<>();
color.add("赤");
color.add("黄");
color.add("青");
for (String a : color) {
System.out.println(a);//青 赤 黄
}
}
}
8行目は、HashSetクラスをインスタンス化してSetインターフェイス型の変数に代入しています。
→ジェネリクス<>でオブジェクトの中身はStringであると宣言しています。
10-12行目は、addメソッドで要素を追加しています。
要素数を取得する (sizeメソッド)
要素数を取得するサンプルです。
package test1;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Set<String> color = new HashSet<>();
color.add("赤");
color.add("黄");
color.add("青");
System.out.println(color.size());//3
}
}
12行目は、sizeメソッドで要素数を取得しています。
指定の要素があるかを返す (containsメソッド)
指定の要素があるかを返すサンプルです。
package test1;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Set<String> color = new HashSet<>();
color.add("赤");
color.add("黄");
color.add("青");
System.out.println(color.contains("黄"));//true
}
}
12行目は、containsメソッドで指定の要素があるかを取得しています。
ある場合trueです。
中身が空かを返す (isEmptyメソッド)
中身が空かを返すサンプルです。
package test1;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Set<String> color = new HashSet<>();
color.add("赤");
color.add("黄");
color.add("青");
System.out.println(color.isEmpty());//false
}
}
12行目は、isEmptyメソッドで中身が空か取得しています。
空の場合trueです。
要素を削除する (removeメソッド)
要素を削除するサンプルです。
package test1;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Set<String> color = new HashSet<>();
color.add("赤");
color.add("黄");
color.add("青");
color.remove("黄");
System.out.println(color);//[青, 赤]
}
}
12行目は、removeメソッドで指定の要素を削除しています。
すべての要素を削除する (clearメソッド)
すべての要素を削除するサンプルです。
package test1;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Set<String> color = new HashSet<>();
color.add("赤");
color.add("黄");
color.add("青");
color.clear();
System.out.println(color);//[]
}
}
12行目は、clearメソッドですべての要素を削除しています。
セットを連結する (addAllメソッド)
セットを連結するサンプルです。
package test1;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Set<String> a1 = new HashSet<>();
a1.add("a");
a1.add("b");
Set<String> b1 = new HashSet<>();
b1.add("あ");
b1.add("い");
a1.addAll(b1);
for (String a : a1) {
System.out.println(a);//a b あ い
}
}
}
18行目は、addAllメソッドでセットを連結しています。
メソッドの引数/戻り値がセットの場合
メソッドの引数と戻り値がセットの場合のサンプルです。
package test1;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Set<String> color = new HashSet<>();
color.add("赤");
color.add("黄");
Set<String> b = showResult(color);
}
private static Set<String> showResult(Set<String> c1) {
return c1;
}
}
12行目は、呼び出し元のメソッドです。引数(実引数)にセットを指定しています。戻り値もセットです。
15行目は、定義されたメソッドです。引数(仮引数)にセットがあります。戻り値もセットです。(以下の図を参照)

呼び出し元のメソッドの引数の変数名(color)と定義されたメソッドの引数の変数名(c1)は異なっていても使用できます。
要素を順番に処理する(forEachメソッド)
forEachメソッドは、要素を順番に処理します。Java8で導入されました。
package test1;
import java.util.HashSet;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Set<String> color = new HashSet<>();
color.add("赤");
color.add("黄");
color.add("青");
color.forEach(a -> System.out.println(a));//青 赤 黄
color.forEach(System.out::println);//青 赤 黄
}
}
13行目は、forEachメソッドでセットの各値を取得しています。変数a以降はラムダ式です。
Java ラムダ式のサンプル
14行目のSystem.out::printlnは、メソッド参照です。13行目と同じ意味です。
以下は、Java8 API仕様のIterableインタフェースのforEachメソッドのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Iterable.html#forEach-java.util.function.Consumer-
関連の記事
Java ArrayListの使い方のサンプル
Java LinkedListの使い方のサンプル
Java HashMapの使い方のサンプル
Java LinkedHashMapの使い方のサンプル
Java TreeMapの使い方のサンプル
Java 拡張for文のサンプル
Java リストから配列を作成するサンプル(ArrayList)
Java 配列からリストを作成するサンプル(Arraysクラス)
Java 配列からリストを作成するサンプル(Collectionsクラス)