English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基礎教程

Java 流程制御

Java 配列

Java 面向オブジェクト(I)

Java 面向オブジェクト(II)

Java 面向オブジェクト(III)

Java 異常処理

Java リスト(List)

Java Queue(キュー)

Java Mapコレクション

Java Setコレクション

Java 入出力(I/O)

Java Reader/Writer

Java その他のトピック

Java HashSet クラス

このチュートリアルでは、Java HashSetクラスを学びます。例を用いて異なるハッシュセットメソッドと操作を学びます。

Java CollectionsフレームワークのHashSetクラスはハッシュテーブルデータ構造の機能を提供します。

それがSetインターフェース

ハッシュセットを作成する

ハッシュセットを作成するには、まずjava.util.HashSetパッケージをインポートする必要があります。

パッケージをインポートした後、Javaでハッシュセットを作成できます。

//具有8の容量と0。75負荷係数のHashSet
HashSet<Integer> numbers = new HashSet<>(8, 0。75);

ここでは、名前のハッシュセットnumbersを生成しました。

注意、新しい部分HashSet<>(8, 0。75)。ここでは、第一引数は容量、および第二引数は負荷係数

  • capacity -このハッシュセットの容量は8。これは、それが8要素。

  • loadFactor - このハッシュセットの負荷係数は0。6。これは、私たちのハッシュセットが60%、要素が新しいハッシュテーブルに移動します。そのサイズは元のハッシュテーブルの2倍です。

默认容量和负载因子

创建散列表而不定义其容量和负载因子是可能的。例如,

//具有默认容量和负载因子的HashSet
HashSet<Integer> numbers1 = new HashSet<>();

デフォルトで、

  • ハッシュセットの容量は、 16

  • 負荷因子は0です。75

HashSetのメソッド

HashSetクラスは、集合に対してさまざまな操作を実行できるさまざまなメソッドを提供します。

要素をHashSetに挿入

  • add() - 指定の要素を集合に挿入

  • addAll() - 指定の集合のすべての要素を集合に挿入

たとえば、

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> evenNumber = new HashSet<>();
        // add()メソッドを使用
        evenNumber.add(2);
        evenNumber.add(4);
        evenNumber.add(6);
        System.out.println("HashSet: " + evenNumber);
        HashSet<Integer> numbers = new HashSet<>();
        
        // addAll()メソッドを使用
        numbers.addAll(evenNumber);
        numbers.add(5);
        System.out.println("New HashSet: " + numbers);
    }
}

出力結果

HashSet: [2, 4, 6]
New HashSet: [2, 4, 5, 6]

HashSet要素にアクセス

ハッシュセットの要素にアクセスするには、iterator()メソッドを使用できます。このメソッドを使用するには、java.util.Iteratorパッケージをインポートする必要があります。たとえば、

import java.util.HashSet;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("HashSet: " + numbers);
        // iterator()メソッドを呼び出す
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("使用IteratorのHashSet: ");
        //要素にアクセス
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

出力結果

HashSet: [2, 5, 6]
Iteratorを使用するHashSet: 2, 5, 6,

要素を削除

  • remove() - 集合から指定の要素を削除

  • removeAll() - 集合からすべての要素を削除

たとえば、

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("HashSet: " + numbers);
        //remove()メソッドを使用
        boolean value1 = numbers.remove(5);
        System.out.println("値5削除されましたか? " + value1);
        boolean value2 = numbers.removeAll(numbers);
        System.out.println("すべての要素が削除されましたか? " + value2);
    }
}

出力結果

HashSet: [2, 5, 6]
値5削除されましたか? true
すべての要素が削除されましたか? true

Set操作メソッド

HashSetクラスのさまざまなメソッドは、さまざまなset操作を実行するために使用できます。

Set集合并集合

二つの集合のユニオンを実行するには、addAll()メソッドを使用できます。例えば、

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> evenNumbers = new HashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("HashSet1:「" + System.out.println("交集合: "
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(3);
        System.out.println("HashSet2:「" + numbers);
        //集合のユニオン
        numbers.addAll(evenNumbers);
        System.out.println("ユニオンは: " + numbers);
    }
}

出力結果

HashSet1: [2, 4]
HashSet2: [1, 3]
ユニオンは: [1, 2, 3, 4]

Set集合の交集合

二つの集合の交集合を実行するには、retainAll()メソッドを使用できます。例えば、

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("HashSet1:「" + primeNumbers);
        HashSet<Integer> evenNumbers = new HashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("HashSet2:「" + System.out.println("交集合: "
        //集合の交集合
        evenNumbers.retainAll(primeNumbers);
        evenNumbers); + System.out.println("交集合: "
    }
}

出力結果

HashSet1: [2, 3]
HashSet2: [2, 4]
交集合: [2]

Set集合の差集合

二つの集合の差集合を計算するには、removeAll()メソッドを使用できます。例えば、

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        primeNumbers.add(5);
        System.out.println("HashSet1:「" + primeNumbers);
        HashSet<Integer> oddNumbers = new HashSet<>();
        oddNumbers.add(1);
        oddNumbers.add(3);
        oddNumbers.add(5);
        System.out.println("HashSet2:「" + oddNumbers);
        //HashSet1とHashSet2の差集合
        primeNumbers.removeAll(oddNumbers);
        System.out.println("Difference : " + primeNumbers);
    }
}

出力結果

HashSet1: [2, 3, 5]
HashSet2: [1, 3, 5]
差集合: [2]

Set集合のサブセット

ある集合が別の集合のサブセットであるか確認するには、containsAll()メソッドを使用できます。例えば、

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("HashSet1:「" + numbers);
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("HashSet2:「" + primeNumbers);
        //primeNumbersがnumbersのサブセットであるか確認します
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("HashSet2HashSetです1のサブセットでしょうか?「" + result);
    }
}

出力結果

HashSet1: [1, 2, 3, 4]
HashSet2: [2, 3]
HashSet2HashSetです1サブセットですか? true

HashSetの他のメソッド

メソッド説明
clone()HashSetのコピーを作成する
contains()HashSet指定の要素を検索し、ブール結果を返す
isEmpty()HashSetが空かどうかを確認する
size()HashSetのサイズを返す
clear()HashSetからすべての要素を削除する

なぜHashSetを選んだのか?

Javaでは、要素にランダムにアクセスする必要がある場合、通常HashSetを使用します。なぜなら、ハッシュテーブルの要素はハッシュコードを使用してアクセスされるからです。

要素のハッシュコードは、ハッシュテーブル内の要素を識別するユニークな識別子です。

HashSetは重複の要素を含むことができません。したがって、各ハッシュセットの要素にはユニークなハッシュコードがあります。

注意: HashSetは非同期です。つまり、複数のスレッドが同時にハッシュセットにアクセスし、そのうちの1つのスレッドがハッシュセットを変更した場合、外部でシンクロナイズする必要があります。