Java LinkedHashSet
Java LinkedHashSet
このチュートリアルでは、例を使って Java LinkedHashSet クラスとそのメソッドについて学びます。
LinkedHashSet
Java コレクション フレームワークのクラスは、ハッシュ テーブルとリンク リスト データ構造の両方の機能を提供します。
Set インターフェイスを実装します。
LinkedHashSet
の要素 HashSet と同様のハッシュ テーブルに格納されます。
ただし、リンクされたハッシュ セットは、そのすべての要素の二重リンク リストを内部的に維持します。リンクされたリストは、要素がハッシュ テーブルに挿入される順序を定義します。
LinkedHashSet を作成する
リンクされたハッシュ セットを作成するには、java.util.LinkedHashSet
をインポートする必要があります。 最初にパッケージ化します。
パッケージをインポートしたら、リンクされたハッシュ セットを Java で作成する方法を次に示します。
// LinkedHashSet with 8 capacity and 0.75 load factor
LinkedHashSet<Integer> numbers = new LinkedHashSet<>(8, 0.75);
ここでは、numbers という名前のリンクされたハッシュ セットを作成しました。 .
new LinkedHashSet<>(8, 0.75)
の部分に注意してください .ここで、最初のパラメータは容量です 2 番目のパラメータは loadFactor です .
- 容量 - このハッシュ セットの容量は 8 です。つまり、8 つの要素を格納できます。
- 負荷係数 - このハッシュ セットの負荷率は 0.6 です。つまり、ハッシュ テーブルが 60% 埋まるたびに、元のハッシュ テーブルの 2 倍のサイズの新しいハッシュ テーブルに要素が移動されます。
デフォルトの容量と負荷率
容量と負荷係数を定義せずに、リンクされたハッシュ セットを作成することができます。たとえば、
// LinkedHashSet with default capacity and load factor
LinkedHashSet<Integer> numbers1 = new LinkedHashSet<>();
デフォルトでは、
- リンクされたハッシュ セットの容量は 16 になります
- 負荷係数は 0.75 になります
他のコレクションからの LinkedHashSet の作成
他のコレクションのすべての要素を含むリンクされたハッシュ セットを作成する方法は次のとおりです。
import java.util.LinkedHashSet;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
// Creating an arrayList of even numbers
ArrayList<Integer> evenNumbers = new ArrayList<>();
evenNumbers.add(2);
evenNumbers.add(4);
System.out.println("ArrayList: " + evenNumbers);
// Creating a LinkedHashSet from an ArrayList
LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers);
System.out.println("LinkedHashSet: " + numbers);
}
}
出力
ArrayList: [2, 4] LinkedHashSet: [2, 4]
LinkedHashSet のメソッド
LinkedHashSet
クラスは、リンクされたハッシュ セットに対してさまざまな操作を実行できるようにするメソッドを提供します。
要素を LinkedHashSet に挿入
add()
- 指定された要素をリンクされたハッシュ セットに挿入しますaddAll()
- 指定されたコレクションのすべての要素をリンクされたハッシュ セットに挿入します
たとえば、
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> evenNumber = new LinkedHashSet<>();
// Using add() method
evenNumber.add(2);
evenNumber.add(4);
evenNumber.add(6);
System.out.println("LinkedHashSet: " + evenNumber);
LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
// Using addAll() method
numbers.addAll(evenNumber);
numbers.add(5);
System.out.println("New LinkedHashSet: " + numbers);
}
}
出力
LinkedHashSet: [2, 4, 6] New LinkedHashSet: [2, 4, 6, 5]
LinkedHashSet 要素へのアクセス
リンクされたハッシュ セットの要素にアクセスするには、 iterator()
を使用できます。 方法。この方法を使用するには、 java.util.Iterator
をインポートする必要があります パッケージ。たとえば、
import java.util.LinkedHashSet;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
numbers.add(2);
numbers.add(5);
numbers.add(6);
System.out.println("LinkedHashSet: " + numbers);
// Calling the iterator() method
Iterator<Integer> iterate = numbers.iterator();
System.out.print("LinkedHashSet using Iterator: ");
// Accessing elements
while(iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
出力
LinkedHashSet: [2, 5, 6] LinkedHashSet using Iterator: 2, 5, 6,
注意 :
hasNext()
true
を返します リンクされたハッシュ セットに次の要素がある場合next()
リンクされたハッシュ セットの次の要素を返します
HashSet から要素を削除
remove()
- リンクされたハッシュ セットから指定された要素を削除しますremoveAll()
- リンクされたハッシュ セットからすべての要素を削除します
たとえば、
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
numbers.add(2);
numbers.add(5);
numbers.add(6);
System.out.println("LinkedHashSet: " + numbers);
// Using the 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);
}
}
出力
LinkedHashSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true
設定操作
LinkedHashSet
のさまざまなメソッド クラスを使用して、さまざまなセット操作を実行することもできます。
セットの結合
2 つは 2 つのセット間の結合を実行します。addAll()
を使用できます 方法。たとえば、
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>();
evenNumbers.add(2);
evenNumbers.add(4);
System.out.println("LinkedHashSet1: " + evenNumbers);
LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
numbers.add(1);
numbers.add(3);
System.out.println("LinkedHashSet2: " + numbers);
// Union of two set
numbers.addAll(evenNumbers);
System.out.println("Union is: " + numbers);
}
}
出力
LinkedHashSet1: [2, 4] LinkedHashSet2: [1, 3] Union is: [1, 3, 2, 4]
集合の交差
2 つのセット間の交差を実行するには、retainAll()
を使用できます。 方法。例えば
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
primeNumbers.add(2);
primeNumbers.add(3);
System.out.println("LinkedHashSet1: " + primeNumbers);
LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>();
evenNumbers.add(2);
evenNumbers.add(4);
System.out.println("LinkedHashSet2: " + evenNumbers);
// Intersection of two sets
evenNumbers.retainAll(primeNumbers);
System.out.println("Intersection is: " + evenNumbers);
}
}
出力
LinkedHashSet1: [2, 3] LinkedHashSet2: [2, 4] Intersection is: [2]
セットの違い
2 つのセットの差を計算するには、removeAll()
を使用できます。 方法。たとえば、
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
primeNumbers.add(2);
primeNumbers.add(3);
primeNumbers.add(5);
System.out.println("LinkedHashSet1: " + primeNumbers);
LinkedHashSet<Integer> oddNumbers = new LinkedHashSet<>();
oddNumbers.add(1);
oddNumbers.add(3);
oddNumbers.add(5);
System.out.println("LinkedHashSet2: " + oddNumbers);
// Difference between LinkedHashSet1 and LinkedHashSet2
primeNumbers.removeAll(oddNumbers);
System.out.println("Difference : " + primeNumbers);
}
}
出力
LinkedHashSet1: [2, 3, 5] LinkedHashSet2: [1, 3, 5] Difference: [2]
サブセット
セットが別のセットのサブセットであるかどうかを確認するには、 containsAll()
を使用できます 方法。たとえば、
import java.util.LinkedHashSet;
class Main {
public static void main(String[] args) {
LinkedHashSet<Integer> numbers = new LinkedHashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4);
System.out.println("LinkedHashSet1: " + numbers);
LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>();
primeNumbers.add(2);
primeNumbers.add(3);
System.out.println("LinkedHashSet2: " + primeNumbers);
// Check if primeNumbers is a subset of numbers
boolean result = numbers.containsAll(primeNumbers);
System.out.println("Is LinkedHashSet2 is subset of LinkedHashSet1? " + result);
}
}
出力
LinkedHashSet1: [1, 2, 3, 4] LinkedHashSet2: [2, 3] Is LinkedHashSet2 is a subset of LinkedHashSet1? true
LinkedHashSet のその他のメソッド
メソッド | 説明 |
---|---|
clone() | LinkedHashSet のコピーを作成します |
contains() | LinkedHashSet を検索します 指定された要素に対して、ブール値の結果を返します |
isEmpty() | LinkedHashSet かどうかをチェックします 空です |
size() | LinkedHashSet のサイズを返します |
clear() | LinkedHashSet からすべての要素を削除します |
LinkedHashSet
について詳しく知るには メソッドについては、Java LinkedHashSet (公式の Java ドキュメント) にアクセスしてください。
LinkedHashSet 対。ハッシュセット
両方 LinkedHashSet
と HashSet
Set
を実装します インターフェース。ただし、両者にはいくつかの違いがあります。
LinkedHashSet
リンクされたリストを内部的に維持します。これにより、要素の挿入順序が維持されます。LinkedHashSet
クラスにはHashSet
より多くのストレージが必要です .これはLinkedHashSet
のためです リンクされたリストを内部で維持します。LinkedHashSet
のパフォーマンスHashSet
より遅い .LinkedHashSet
に存在するリンクされたリストが原因です .
LinkedHashSet 対。ツリーセット
LinkedHashSet
の主な違いは次のとおりです。 と TreeSet
:
TreeSet
クラスはSortedSet
を実装します インターフェース。そのため、ツリー セット内の要素は並べ替えられます。ただし、LinkedHashSet
クラスはその要素の挿入順序のみを維持します。- A
TreeSet
通常はLinkedHashSet
より遅い .これは、要素がTreeSet
に追加されるたびに 、ソート操作を実行する必要があります。 - <ランダム>
LinkedHashSet
null 値の挿入を許可します。ただし、TreeSet
に null 値を挿入することはできません。 .ランダム>
Java