English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、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クラスは、集合に対してさまざまな操作を実行できるさまざまなメソッドを提供します。
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]
ハッシュセットの要素にアクセスするには、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
HashSetクラスのさまざまなメソッドは、さまざまな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]
二つの集合の交集合を実行するには、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]
二つの集合の差集合を計算するには、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]
ある集合が別の集合のサブセットであるか確認するには、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
メソッド | 説明 |
---|---|
clone() | HashSetのコピーを作成する |
contains() | HashSet指定の要素を検索し、ブール結果を返す |
isEmpty() | HashSetが空かどうかを確認する |
size() | HashSetのサイズを返す |
clear() | HashSetからすべての要素を削除する |
Javaでは、要素にランダムにアクセスする必要がある場合、通常HashSetを使用します。なぜなら、ハッシュテーブルの要素はハッシュコードを使用してアクセスされるからです。
要素のハッシュコードは、ハッシュテーブル内の要素を識別するユニークな識別子です。
HashSetは重複の要素を含むことができません。したがって、各ハッシュセットの要素にはユニークなハッシュコードがあります。
注意: HashSetは非同期です。つまり、複数のスレッドが同時にハッシュセットにアクセスし、そのうちの1つのスレッドがハッシュセットを変更した場合、外部でシンクロナイズする必要があります。