Java HashSetの使い方のサンプル

JavaのHashSetクラスの使い方のサンプルです。

確認環境
・Java 8

目次

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クラス)

△上に戻る