Java HashSet クラス
Java HashSet クラス
このチュートリアルでは、Java HashSet クラスについて学習します。例を使って、さまざまなハッシュ セットの方法と操作について学習します。
HashSet
Java Collections フレームワークのクラスは、ハッシュ テーブル データ構造の機能を提供します。
Set インターフェイスを実装します。
ハッシュセットの作成
ハッシュ セットを作成するには、java.util.HashSet
をインポートする必要があります。 最初にパッケージ化します。
パッケージをインポートしたら、Java でハッシュ セットを作成する方法を次に示します。
// HashSet with 8 capacity and 0.75 load factor
HashSet<Integer> numbers = new HashSet<>(8, 0.75);
ここでは、numbers
という名前のハッシュ セットを作成しました。 .
注意、新しい HashSet<>(8, 0.75)
の部分 .ここで、最初のパラメータは容量です 、2 番目のパラメータは loadFactor です .
- 容量 - このハッシュ セットの容量は 8 です。つまり、8 つの要素を格納できます。
- 負荷係数 - このハッシュ セットの負荷率は 0.6 です。つまり、ハッシュ セットが 60% 埋まるたびに、元のハッシュ テーブルの 2 倍のサイズの新しいハッシュ テーブルに要素が移動されます。
デフォルトの容量と負荷率
容量や負荷率を定義せずにハッシュテーブルを作成することができます。たとえば、
// HashSet with default capacity and load factor
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<>();
// Using add() method
evenNumber.add(2);
evenNumber.add(4);
evenNumber.add(6);
System.out.println("HashSet: " + evenNumber);
HashSet<Integer> numbers = new HashSet<>();
// Using addAll() method
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);
// Calling iterator() method
Iterator<Integer> iterate = numbers.iterator();
System.out.print("HashSet using Iterator: ");
// Accessing elements
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
出力
HashSet: [2, 5, 6] HashSet using Iterator: 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);
// Using remove() method
boolean value1 = numbers.remove(5);
System.out.println("Is 5 removed? " + value1);
boolean value2 = numbers.removeAll(numbers);
System.out.println("Are all elements removed? " + value2);
}
}
出力
HashSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true
オペレーションの設定
HashSet
のさまざまなメソッド クラスを使用して、さまざまなセット操作を実行することもできます。
セットの結合
2 つのセット間の結合を実行するには、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: " + evenNumbers);
HashSet<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(3);
System.out.println("HashSet2: " + numbers);
// Union of two set
numbers.addAll(evenNumbers);
System.out.println("Union is: " + numbers);
}
}
出力
HashSet1: [2, 4] HashSet2: [1, 3] Union is: [1, 2, 3, 4]
集合の交差
2 つのセット間の交差を実行するには、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: " + evenNumbers);
// Intersection of two sets
evenNumbers.retainAll(primeNumbers);
System.out.println("Intersection is: " + evenNumbers);
}
}
出力
HashSet1: [2, 3] HashSet2: [2, 4] Intersection is: [2]
セットの違い
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);
// Difference between HashSet1 and HashSet2
primeNumbers.removeAll(oddNumbers);
System.out.println("Difference : " + primeNumbers);
}
}
出力
HashSet1: [2, 3, 5] HashSet2: [1, 3, 5] Difference: [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);
// Check if primeNumbers is a subset of numbers
boolean result = numbers.containsAll(primeNumbers);
System.out.println("Is HashSet2 is subset of HashSet1? " + result);
}
}
出力
HashSet1: [1, 2, 3, 4] HashSet2: [2, 3] Is HashSet2 is a subset of HashSet1? true
HashSet のその他のメソッド
メソッド | 説明 |
---|---|
clone() | HashSet のコピーを作成します |
contains() | HashSet を検索します 指定された要素に対して、ブール値の結果を返します |
isEmpty() | HashSet かどうかをチェックします 空です |
size() | HashSet のサイズを返します |
clear() | HashSet からすべての要素を削除します |
HashSet メソッドの詳細については、Java HashSet (Java の公式ドキュメント) にアクセスしてください。
ハッシュセットを使用する理由
Java では、HashSet
要素にランダムにアクセスする必要がある場合によく使用されます。これは、ハッシュ テーブル内の要素がハッシュ コードを使用してアクセスされるためです。
要素のハッシュコードは、ハッシュ テーブル内の要素を識別するのに役立つ一意の ID です。
HashSet
重複する要素を含めることはできません。したがって、各ハッシュ セット要素には一意のハッシュコードがあります。
注: HashSet が同期されていません。これは、複数のスレッドが同時にハッシュ セットにアクセスし、スレッドの 1 つがハッシュ セットを変更した場合です。次に、外部同期する必要があります。
Java