工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java LinkedHashSet完全マスター:特徴、メソッド、実践例

Java LinkedHashSet

このチュートリアルでは、例を用いてJavaのLinkedHashSetクラスとそのメソッドについて学習します。

JavaコレクションフレームワークのLinkedHashSetクラスは、ハッシュテーブルとリンクリストの両データ構造の機能を提供します。

Setインターフェースを実装します。

Java LinkedHashSet完全マスター:特徴、メソッド、実践例

LinkedHashSetの要素は、HashSetと同様にハッシュテーブルに格納されます。

しかし、リンクハッシュセットは内部的にすべての要素に対して双方向リンクリストを維持します。このリンクリストがハッシュテーブルでの要素挿入順序を定義します。


LinkedHashSetの作成

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

インポート後、Javaでリンクハッシュセットを作成する方法は以下の通りです。

// 容量8、負荷係数0.75のLinkedHashSet
LinkedHashSet<Integer> numbers = new LinkedHashSet<>(8, 0.75);

ここで、numbersというリンクハッシュセットを作成しました。

new LinkedHashSet<>(8, 0.75)の部分に注目してください。最初のパラメータはcapacity、2番目のパラメータはloadFactorです。

デフォルトの容量と負荷係数

容量と負荷係数を定義せずにリンクハッシュセットを作成することも可能です。例:

// デフォルト容量と負荷係数のLinkedHashSet
LinkedHashSet<Integer> numbers1 = new LinkedHashSet<>();

デフォルトでは、


他のコレクションからLinkedHashSetを作成

他のコレクションのすべての要素を含むリンクハッシュセットを作成する方法:

import java.util.LinkedHashSet;
import java.util.ArrayList;
class Main {
    public static void main(String[] args) {
        // 偶数のArrayListを作成
        ArrayList<Integer> evenNumbers = new ArrayList<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("ArrayList: " + evenNumbers);
        // ArrayListからLinkedHashSetを作成
        LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers);
        System.out.println("LinkedHashSet: " + numbers);
    }
}

出力

ArrayList: [2, 4]
LinkedHashSet: [2, 4]

LinkedHashSetのメソッド

LinkedHashSetクラスは、リンクハッシュセット上でさまざまな操作を実行するメソッドを提供します。


LinkedHashSetへの要素挿入

例:

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

出力

LinkedHashSet: [2, 4, 6]
新しい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);
        // iterator()メソッドの呼び出し
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("Iterator使用: ");
        // 要素へのアクセス
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

出力

LinkedHashSet: [2, 5, 6]
Iterator使用: 2, 5, 6,

注意:


HashSetからの要素削除

例:

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);
        // remove()メソッドの使用
        boolean value1 = numbers.remove(5);
        System.out.println("5は削除されたか? " + value1);
        boolean value2 = numbers.removeAll(numbers);
        System.out.println("すべての要素が削除されたか? " + value2);
    }
}

出力

LinkedHashSet: [2, 5, 6]
5は削除されたか? true
すべての要素が削除されたか? true

セット操作

LinkedHashSetクラスのさまざまなメソッドは、各種セット操作の実行にも使用できます。


和集合

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);
        // 2つのセットの和集合
        numbers.addAll(evenNumbers);
        System.out.println("和集合: " + numbers);
    }
}

出力

LinkedHashSet1: [2, 4]
LinkedHashSet2: [1, 3]
和集合: [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);
        // 2つのセットの積集合
        evenNumbers.retainAll(primeNumbers);
        System.out.println("積集合: " + evenNumbers);
    }
}

出力

LinkedHashSet1: [2, 3]
LinkedHashSet2: [2, 4]
積集合: [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);
        // LinkedHashSet1とLinkedHashSet2の差集合
        primeNumbers.removeAll(oddNumbers);
        System.out.println("差集合: " + primeNumbers);
    }
}

出力

LinkedHashSet1: [2, 3, 5]
LinkedHashSet2: [1, 3, 5]
差集合: [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);
        // primeNumbersがnumbersの部分集合かチェック
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("LinkedHashSet2はLinkedHashSet1の部分集合か? " + result);
    }
}

出力

LinkedHashSet1: [1, 2, 3, 4]
LinkedHashSet2: [2, 3]
LinkedHashSet2はLinkedHashSet1の部分集合か? true

LinkedHashSetのその他のメソッド

メソッド説明
clone()LinkedHashSetのコピーを作成
contains()指定要素をLinkedHashSetで検索しboolean結果を返す
isEmpty()LinkedHashSetが空かどうかチェック
size()LinkedHashSetのサイズを返す
clear()LinkedHashSetからすべての要素を削除

LinkedHashSetメソッドの詳細については、Java LinkedHashSet(公式Javaドキュメント)を参照してください。


LinkedHashSet vs HashSet

LinkedHashSetとHashSetの両方がSetインターフェースを実装します。しかし、いくつかの違いがあります。


LinkedHashSet vs TreeSet

LinkedHashSetとTreeSetの主な違いは以下の通り:

Java

  1. Java演算子をマスター:種類、構文、実践例
  2. Javaコメント:種類、使い方、ベストプラクティス
  3. Java if…elseをマスター:制御フローを徹底解説
  4. Java拡張forループをマスター:構文、例、ベストプラクティス
  5. Java文字列をマスター:生成、メソッド、ベストプラクティス
  6. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  7. Java無名インナークラス完全ガイド:定義、構文、実践例
  8. Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法
  9. Javaアノテーション完全ガイド:種類、配置場所、実践例
  10. Javaアサーション完全ガイド:バグ早期発見とコード信頼性の向上
  11. Java Vectorの理解:使い方、特徴、ArrayListとの比較