Java TreeSet
Java ツリーセット
このチュートリアルでは、例を使って Java TreeSet クラスとそのさまざまな操作とメソッドについて学びます。
TreeSet
Java コレクション フレームワークのクラスは、ツリー データ構造の機能を提供します。
NavigableSet インターフェースを拡張します。
ツリーセットの作成
ツリー セットを作成するには、java.util.TreeSet
をインポートする必要があります。 最初にパッケージ化します。
パッケージをインポートしたら、TreeSet
を作成する方法を次に示します。
TreeSet<Integer> numbers = new TreeSet<>();
ここでは、TreeSet
を作成しました。 引数なし。この場合、TreeSet
の要素 自然にソートされます (昇順)。
ただし、 Comparator
を使用して要素の並べ替えをカスタマイズできます インターフェース。これについては、このチュートリアルの後半で学習します。
TreeSet のメソッド
TreeSet
クラスは、セットに対してさまざまな操作を実行できるようにするさまざまなメソッドを提供します。
要素を TreeSet に挿入
add()
- 指定された要素をセットに挿入しますaddAll()
- 指定されたコレクションのすべての要素をセットに挿入します
たとえば、
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,
要素を削除
remove()
- セットから指定された要素を削除しますremoveAll()
- セットからすべての要素を削除します
たとえば、
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() メソッド
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() メソッド
- より高い (要素) - 指定された
element
より大きい要素の中で最も低い要素を返します . - 下(要素) - 指定された
element
より小さい要素の中で最大の要素を返します . - 天井(要素) - 指定された element より大きい要素の中で最も低い要素を返します . 要素の場合 渡されたツリーセットに存在する場合、
element
を返します 引数として渡されます。 - 床(要素) - 指定された
element
より小さい要素の中で最大の要素を返します . 要素の場合 渡されたツリー セットに存在する場合、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 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() メソッド
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 間のすべての要素を返します と e2 、e1 を含む .
たとえば、
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
を実装します インターフェース。ただし、両者にはいくつかの違いがあります。
HashSet
とは異なります 、TreeSet
の要素 ある順番で保存されます。TreeSet
だからですSortedSet
を実装します インターフェイスも同様です。TreeSet
簡単なナビゲーションのためのいくつかのメソッドを提供します。例:first()
、last()
、headSet(
)、tailSet()
などTreeSet
が原因ですNavigableSet
も実装しています インターフェース。HashSet
TreeSet
よりも高速です add、remove、contains、size などの基本的な操作
ツリーセット コンパレータ
上記のすべての例で、ツリー セットの要素は自然に並べ替えられます。ただし、要素の順序をカスタマイズすることもできます。
このためには、ツリー セット内のどの要素がソートされるかに基づいて、独自のコンパレータ クラスを作成する必要があります。たとえば、
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