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

Java TreeSet

Java ツリーセット

このチュートリアルでは、例を使って Java TreeSet クラスとそのさまざまな操作とメソッドについて学びます。

TreeSet Java コレクション フレームワークのクラスは、ツリー データ構造の機能を提供します。

NavigableSet インターフェースを拡張します。


ツリーセットの作成

ツリー セットを作成するには、java.util.TreeSet をインポートする必要があります。 最初にパッケージ化します。

パッケージをインポートしたら、TreeSet を作成する方法を次に示します。


TreeSet<Integer> numbers = new TreeSet<>();

ここでは、TreeSet を作成しました。 引数なし。この場合、TreeSet の要素 自然にソートされます (昇順)。

ただし、 Comparator を使用して要素の並べ替えをカスタマイズできます インターフェース。これについては、このチュートリアルの後半で学習します。


TreeSet のメソッド

TreeSet クラスは、セットに対してさまざまな操作を実行できるようにするさまざまなメソッドを提供します。


要素を TreeSet に挿入

たとえば、

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {

        TreeSet<Integer> evenNumbers = new TreeSet<>();

        // Using the add() method
        evenNumbers.add(2);
        evenNumbers.add(4);
        evenNumbers.add(6);
        System.out.println("TreeSet: " + evenNumbers);

        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);

        // Using the addAll() method
        numbers.addAll(evenNumbers);
        System.out.println("New TreeSet: " + numbers);
    }
}

出力

TreeSet: [2, 4, 6]
New TreeSet: [1, 2, 4, 6]

TreeSet 要素へのアクセス

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

import java.util.TreeSet;
import java.util.Iterator;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Calling iterator() method
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("TreeSet using Iterator: ");
        // Accessing elements
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

出力

TreeSet: [2, 5, 6]
TreeSet using Iterator: 2, 5, 6,

要素を削除

たとえば、

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using the remove() method
        boolean value1 = numbers.remove(5);
        System.out.println("Is 5 removed? " + value1);

        // Using the removeAll() method
        boolean value2 = numbers.removeAll(numbers);
        System.out.println("Are all elements removed? " + value2);
    }
}

出力

TreeSet: [2, 5, 6]
Is 5 removed? true
Are all elements removed? true

TreeSet 以降 クラスは NavigableSet を実装します 、ツリー セットの要素をナビゲートするためのさまざまな方法を提供します。

1. first() および last() メソッド

たとえば、

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using the first() method
        int first = numbers.first();
        System.out.println("First Number: " + first);

        // Using the last() method
        int last = numbers.last();
        System.out.println("Last Number: " + last);
    }
}

出力

TreeSet: [2, 5, 6]
First Number: 2
Last Number: 6

2. ceiling()、floor()、higher()、lower() メソッド

たとえば、

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using higher()
        System.out.println("Using higher: " + numbers.higher(4));

        // Using lower()
        System.out.println("Using lower: " + numbers.lower(4));

        // Using ceiling()
        System.out.println("Using ceiling: " + numbers.ceiling(4));

        // Using floor()
        System.out.println("Using floor: " + numbers.floor(3));

    }
}

出力

TreeSet: [2, 4, 5, 6]
Using higher: 5
Using lower: 2
Using ceiling: 4
Using floor: 2

3. pollfirst() および pollLast() メソッド

たとえば、

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using pollFirst()
        System.out.println("Removed First Element: " + numbers.pollFirst());

        // Using pollLast()
        System.out.println("Removed Last Element: " + numbers.pollLast());

        System.out.println("New TreeSet: " + numbers);
    }
}

出力

TreeSet: [2, 4, 5, 6]
Removed First Element: 2
Removed Last Element: 6
New TreeSet: [4, 5]

4. headSet()、tailSet()、および subSet() メソッド


headSet(要素, booleanValue)

headSet() メソッドは、指定された element の前に設定されたツリーのすべての要素を返します (これは引数として渡されます)。

booleanValue パラメータはオプションです。デフォルト値は false です .

true の場合 booleanValue として渡されます 、メソッドは、指定された要素を含む、指定された要素の前のすべての要素を返します。

たとえば、

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using headSet() with default boolean value
        System.out.println("Using headSet without boolean value: " + numbers.headSet(5));

        // Using headSet() with specified boolean value
        System.out.println("Using headSet with boolean value: " + numbers.headSet(5, true));
    }
}

出力

TreeSet: [2, 4, 5, 6]
Using headSet without boolean value: [2, 4]
Using headSet with boolean value: [2, 4, 5]

tailSet(要素, booleanValue)

tailSet() メソッドは、指定された element の後に設定されたツリーのすべての要素を返します (パラメータとして渡される) 指定された 要素 を含む .

booleanValue パラメータはオプションです。デフォルト値は true です .

false の場合 booleanValue として渡されます 、メソッドは指定された element の後のすべての要素を返します 指定された 要素 を含めずに .

たとえば、

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using tailSet() with default boolean value
        System.out.println("Using tailSet without boolean value: " + numbers.tailSet(4));

        // Using tailSet() with specified boolean value
        System.out.println("Using tailSet with boolean value: " + numbers.tailSet(4, false));
    }
}

出力

TreeSet: [2, 4, 5, 6]
Using tailSet without boolean value: [4, 5, 6]
Using tailSet with boolean value: [5, 6]

subSet(e1, bv1, e2, bv2)

subSet() メソッドは e1 間のすべての要素を返します と e2 e1 を含む .

bv1 そしてbv2 オプションのパラメータです。 bv1 のデフォルト値 true です 、および bv2 のデフォルト値 false です .

false の場合 bv1 として渡されます 、メソッドは e1 間のすべての要素を返します と e2 e1 を含まない .

true の場合 bv2 として渡されます 、メソッドは e1 間のすべての要素を返します と e2e1 を含む .

たとえば、

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(4);
        numbers.add(6);
        System.out.println("TreeSet: " + numbers);

        // Using subSet() with default boolean value
        System.out.println("Using subSet without boolean value: " + numbers.subSet(4, 6));

        // Using subSet() with specified boolean value
        System.out.println("Using subSet with boolean value: " + numbers.subSet(4, false, 6, true));
    }
}

出力

TreeSet: [2, 4, 5, 6]
Using subSet without boolean value: [4, 5]
Using subSet with boolean value: [5, 6]

設定操作

TreeSet のメソッド クラスを使用して、さまざまなセット操作を実行することもできます。


セットの結合

2 つのセット間の結合を実行するには、addAll() を使用します。 方法。たとえば、

import java.util.TreeSet;;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> evenNumbers = new TreeSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("TreeSet1: " + evenNumbers);

        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("TreeSet2: " + numbers);

        // Union of two sets
        numbers.addAll(evenNumbers);
        System.out.println("Union is: " + numbers);

    }
}

出力

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3]
Union is: [1, 2, 3, 4]

集合の交差

2 つのセット間の交差を実行するには、retainAll() を使用します。 方法。たとえば、

import java.util.TreeSet;;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> evenNumbers = new TreeSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("TreeSet1: " + evenNumbers);

        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        System.out.println("TreeSet2: " + numbers);

        // Intersection of two sets
        numbers.retainAll(evenNumbers);
        System.out.println("Intersection is: " + numbers);
    }
}

出力

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3]
Intersection is: [2]

セットの違い

2 つのセットの差を計算するには、removeAll() を使用できます。 方法。たとえば、

import java.util.TreeSet;;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> evenNumbers = new TreeSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("TreeSet1: " + evenNumbers);

        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("TreeSet2: " + numbers);

        // Difference between two sets
        numbers.removeAll(evenNumbers);
        System.out.println("Difference is: " + numbers);
    }
}

出力

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3, 4]
Difference is: [1, 3]

セットのサブセット

セットが別のセットのサブセットであるかどうかを確認するには、 containsAll() を使用します 方法。たとえば、

import java.util.TreeSet;

class Main {
    public static void main(String[] args) {
        TreeSet<Integer> numbers = new TreeSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("TreeSet1: " + numbers);

        TreeSet<Integer> primeNumbers = new TreeSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("TreeSet2: " + primeNumbers);

        // Check if primeNumbers is subset of numbers
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("Is TreeSet2 subset of TreeSet1? " + result);
    }
}

出力

TreeSet1: [1, 2, 3, 4]
TreeSet2: [2, 3]
Is TreeSet2 subset of TreeSet1? True

TreeSet のその他のメソッド

メソッド 説明
clone() TreeSet のコピーを作成します
contains() 指定された要素の TreeSet を検索し、ブール値の結果を返します
isEmpty() TreeSet かどうかをチェックします 空です
size() TreeSet のサイズを返します
clear() TreeSet からすべての要素を削除します

詳細については、Java TreeSet (Java の公式ドキュメント) にアクセスしてください。


TreeSet 対。ハッシュセット

TreeSet の両方 HashSet と同様に Set を実装します インターフェース。ただし、両者にはいくつかの違いがあります。


ツリーセット コンパレータ

上記のすべての例で、ツリー セットの要素は自然に並べ替えられます。ただし、要素の順序をカスタマイズすることもできます。

このためには、ツリー セット内のどの要素がソートされるかに基づいて、独自のコンパレータ クラスを作成する必要があります。たとえば、

import java.util.TreeSet;
import java.util.Comparator;

class Main {
    public static void main(String[] args) {

        // Creating a tree set with customized comparator
        TreeSet<String> animals = new TreeSet<>(new CustomComparator());

        animals.add("Dog");
        animals.add("Zebra");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("TreeSet: " + animals);
    }

    // Creating a comparator class
    public static class CustomComparator implements Comparator<String> {

        @Override
        public int compare(String animal1, String animal2) {
            int value =  animal1.compareTo(animal2);

            // elements are sorted in reverse order
            if (value > 0) {
                return -1;
            }
            else if (value < 0) {
                return 1;
            }
            else {
                return 0;
            }
        }
    }
}

出力

TreeSet: [Zebra, Horse, Dog, Cat]

上記の例では、CustomComparator を渡すツリー セットを作成しました。 引数としてのクラス。

CustomComparator クラスは Comparator を実装します

次に compare() をオーバーライドします 方法。このメソッドは要素を逆順でソートします。

詳細については、Java Comparator (Java の公式ドキュメント) にアクセスしてください。


Java

  1. Java オペレーター
  2. Java コメント
  3. Java for-each ループ
  4. Java 文字列
  5. Java インターフェイス
  6. Java匿名クラス
  7. Java try-with-resources
  8. Java アノテーション
  9. Java アサーション
  10. Java アルゴリズム
  11. Java で乱数を生成する方法