Java HashSet

Java 集合框架Java コレクションフレームワーク

HashSet は HashMap に基づいて実装されており、重複する要素を許可しない集合です。

HashSet は null 値を許可します。

HashSet は順序付けられておらず、挿入の順序は記録されません。

HashSet はスレッドセーフではありません。複数のスレッドが同時に HashSet を変更しようとすると、最終結果は未確定になります。マルチスレッドでアクセスする場合は、HashSet への同時アクセスを明示的に同期させる必要があります。

HashSet は Set インターフェースを実装しています。

HashSet の要素は実際にはオブジェクトであり、いくつかの一般的な基本型はそのラッパークラスを使用できます。

基本型に対応するラッパークラスの表は次のとおりです:

基本型参照型
booleanBoolean
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter

HashSet クラスは java.util パッケージにあり、使用前にインポートする必要があります。構文は次のとおりです:

import java.util.HashSet; // 引入 HashSet 类

次の例では、文字列要素を保存するための HashSet オブジェクト sites を作成します:

HashSet<String> sites = new HashSet<String>();

要素を追加

HashSet クラスは多くの便利なメソッドを提供しています。要素を追加するには add() メソッドを使用できます:

例

// HashSet クラスをインポート
import java.util.HashSet;

public class サンプルTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("サンプル");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("サンプル");  // 重複する要素は追加されません
        System.out.println(sites);
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

[Google, サンプル, Zhihu, Taobao]

上記の例では、サンプル が2回追加されていますが、コレクション内では1回だけ出現します。コレクション内の各要素は一意でなければならないためです。

要素が存在するかどうかを判定

contains() メソッドを使用して、要素がコレクション内に存在するかどうかを判定できます:

例

// HashSet クラスをインポート
import java.util.HashSet;

public class サンプルTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("サンプル");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("サンプル");  // 重複する要素は追加されません
        System.out.println(sites.contains("Taobao"));
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

true

要素を削除

remove() メソッドを使用して、コレクション内の要素を削除できます:

例

// HashSet クラスをインポート
import java.util.HashSet;

public class サンプルTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("サンプル");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("サンプル");     // 重複する要素は追加されません
        sites.remove("Taobao");  // 要素を削除。削除に成功すると true、それ以外は false
        System.out.println(sites);
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

[Google, サンプル, Zhihu]

コレクション内のすべての要素を削除するには、clear メソッドを使用できます:

例

// HashSet クラスをインポート
import java.util.HashSet;

public class サンプルTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("サンプル");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("サンプル");     // 重複する要素は追加されません
        sites.clear();  
        System.out.println(sites);
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

[]

サイズを計算

HashSet 内の要素数を計算するには、size() メソッドを使用できます:

例

// HashSet クラスをインポート
import java.util.HashSet;

public class サンプルTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("サンプル");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("サンプル");     // 重複する要素は追加されません
        System.out.println(sites.size());  
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

4

HashSet を反復処理

for-each を使用して HashSet 内の要素を反復処理できます。

例

// HashSet クラスをインポート
import java.util.HashSet;

public class サンプルTest {
    public static void main(String[] args) {
    HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("サンプル");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("サンプル");     // 重複する要素は追加されません
        for (String i : sites) {
            System.out.println(i);
        }
    }
}

上記のコードを実行すると、出力結果は次のとおりです:

Google
サンプル
Zhihu
Taobao

HashSet のよく使用されるメソッド

メソッド 戻り値 説明 例
add(E e) boolean コレクションに要素を追加し、成功すると true を返しますtrue、重複する要素は false を返しますfalse。 set.add("Java");
remove(Object o) boolean 指定された要素を削除し、成功すると true を返しますtrue、要素が存在しない場合は false を返しますfalse。 set.remove("Python");
contains(Object o) boolean コレクションが指定された要素を含むかどうかを確認します。 if (set.contains("Java")) { ... }
size() int コレクション内の要素数を返します。 int count = set.size();
isEmpty() boolean コレクションが空であるかどうかを判定します。 if (set.isEmpty()) { ... }
clear() void コレクション内のすべての要素をクリアします。 set.clear();
iterator() Iterator<E> コレクションのイテレータを返し、要素を走査するために使用します。 for (String s : set) { ... }
toArray() Object[] コレクションを配列に変換します。 Object[] arr = set.toArray();
toArray(T[] a) T[] コレクションを指定された型の配列に変換します。 String[] arr = set.toArray(new String[0]);
addAll(Collection<? extends E> c) boolean 別のコレクションのすべての要素を追加します(和集合操作)。 set.addAll(Arrays.asList("A", "B"));
retainAll(Collection<?> c) boolean 指定されたコレクションと共通する要素のみを保持します(積集合操作)。 set.retainAll(otherSet);
removeAll(Collection<?> c) boolean 指定されたコレクションと共通する要素を削除します(差集合操作)。 set.removeAll(otherSet);

その他の API メソッドは次を参照してください:https://www.example.com/manual/jdk11api/java.base/java/util/HashSet.html

Java 集合框架Java コレクションフレームワーク

その他の拡張