В този урок ще научим за класа Java TreeSet и различните му операции и методи с помощта на примери.
В TreeSetкласа на колекции рамките на Java осигурява функционалността на дървовидна структура на данните.
Той разширява интерфейса NavigableSet.

Създаване на TreeSet
За да създадем дървесен набор, първо трябва да импортираме java.util.TreeSetпакета.
След като импортираме пакета, ето как можем да създадем a TreeSetв Java.
TreeSet numbers = new TreeSet();
Тук създадохме TreeSetбез никакви аргументи. В този случай елементите в TreeSetса сортирани по естествен път (възходящ ред).
Въпреки това можем да персонализираме сортирането на елементи, като използваме Comparatorинтерфейса. Ще научим за това по-късно в този урок.
Методи на TreeSet
В TreeSetкласа предоставя различни методи, които ни позволяват да изпълняват различни операции на снимачната площадка.
Вмъкване на елементи в TreeSet
add()- вмъква посочения елемент в комплектаaddAll()- вмъква всички елементи от посочената колекция в набора
Например,
import java.util.TreeSet; class Main ( public static void main(String() args) ( TreeSet evenNumbers = new TreeSet(); // Using the add() method evenNumbers.add(2); evenNumbers.add(4); evenNumbers.add(6); System.out.println("TreeSet: " + evenNumbers); TreeSet 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 Elements
За достъп до елементите на дървесен набор можем да използваме iterator()метода. За да използваме този метод, трябва да импортираме java.util.Iteratorпакет. Например,
import java.util.TreeSet; import java.util.Iterator; class Main ( public static void main(String() args) ( TreeSet numbers = new TreeSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("TreeSet: " + numbers); // Calling iterator() method Iterator 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 с помощта на Iterator: 2, 5, 6,
Премахване на елементи
remove()- премахва посочения елемент от набораremoveAll()- премахва всички елементи от комплекта
Например,
import java.util.TreeSet; class Main ( public static void main(String() args) ( TreeSet 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) Премахнато ли е 5? true Всички елементи ли са премахнати? вярно
Методи за навигация
Тъй като TreeSetкласът изпълнява NavigableSet, той предоставя различни методи за навигация над елементите от дървовидния набор.
1. първи () и последен () методи
first()- връща първия елемент от набораlast()- връща последния елемент от набора
Например,
import java.util.TreeSet; class Main ( public static void main(String() args) ( TreeSet 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) Първо число: 2 Последно число: 6
2. Методи за таван (), под (), по-висок () и по-нисък ()
- по-висок (елемент) - Връща най-ниския елемент сред онези елементи, които са по-големи от посочените
element. - по-нисък (елемент) - Връща най-големия елемент сред онези елементи, които са по-малко от посочените
element. - таван (елемент) - Връща най-ниския елемент измежду тези елементи, които са по-големи от посочения елемент. Ако предаденият елемент съществува в дървесен набор, той връща
elementпредадения като аргумент. - floor (element) - Връща най-големия елемент измежду тези елементи, които са по-малко от посочените
element. Ако предаденият елемент съществува в дървесен набор, той връщаelementпредадения като аргумент.
Например,
import java.util.TreeSet; class Main ( public static void main(String() args) ( TreeSet 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) Използване на по-високо: 5 Използване на по-ниско: 2 Използване на таван: 4 Използване на под: 2
3. Методи pollfirst () и pollLast ()
pollFirst()- връща и премахва първия елемент от набораpollLast()- връща и премахва последния елемент от набора
Например,
import java.util.TreeSet; class Main ( public static void main(String() args) ( TreeSet 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) Премахнат първи елемент: 2 Премахнат последен елемент: 6 Нов набор от дървета: (4, 5)
4. Методи headSet (), tailSet () и subSet ()
headSet (елемент, booleanValue)
На headSet()връща метод всички елементи на набор дърво преди посочената елемент (които се предават като аргумент).
Параметърът booleanValue не е задължителен. Стойността му по подразбиране е false.
Ако trueсе предаде като booleanValue, методът връща всички елементи преди посочения елемент, включително посочения елемент.
Например,
import java.util.TreeSet; class Main ( public static void main(String() args) ( TreeSet 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) Използване на headSet без булева стойност: (2, 4) Използване на headSet с булева стойност: (2, 4, 5)
tailSet (елемент, booleanValue)
The tailSet() method returns all the elements of a tree set after the specified element (which is passed as a parameter) including the specified element.
The booleanValue parameter is optional. Its default value is true.
If false is passed as a booleanValue, the method returns all the elements after the specified element without including the specified element.
For example,
import java.util.TreeSet; class Main ( public static void main(String() args) ( TreeSet 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)); ) )
Output
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)
The subSet() method returns all the elements between e1 and e2 including e1.
The bv1 and bv2 are optional parameters. The default value of bv1 is true, and the default value of bv2 is false.
If false is passed as bv1, the method returns all the elements between e1 and e2 without including e1.
If true is passed as bv2, the method returns all the elements between e1 and e2, including e1.
For example,
import java.util.TreeSet; class Main ( public static void main(String() args) ( TreeSet 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)); ) )
Output
TreeSet: (2, 4, 5, 6) Using subSet without boolean value: (4, 5) Using subSet with boolean value: (5, 6)
Set Operations
The methods of the TreeSet class can also be used to perform various set operations.
Union of Sets
To perform the union between two sets, we use the addAll() method. For example,
import java.util.TreeSet;; class Main ( public static void main(String() args) ( TreeSet evenNumbers = new TreeSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("TreeSet1: " + evenNumbers); TreeSet 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); ) )
Output
TreeSet1: (2, 4) TreeSet2: (1, 2, 3) Union is: (1, 2, 3, 4)
Intersection of Sets
To perform the intersection between two sets, we use the retainAll() method. For example,
import java.util.TreeSet;; class Main ( public static void main(String() args) ( TreeSet evenNumbers = new TreeSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("TreeSet1: " + evenNumbers); TreeSet 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); ) )
Output
TreeSet1: (2, 4) TreeSet2: (1, 2, 3) Intersection is: (2)
Difference of Sets
To calculate the difference between the two sets, we can use the removeAll() method. For example,
import java.util.TreeSet;; class Main ( public static void main(String() args) ( TreeSet evenNumbers = new TreeSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("TreeSet1: " + evenNumbers); TreeSet 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); ) )
Output
TreeSet1: (2, 4) TreeSet2: (1, 2, 3, 4) Difference is: (1, 3)
Subset of a Set
To check if a set is a subset of another set or not, we use the containsAll() method. For example,
import java.util.TreeSet; class Main ( public static void main(String() args) ( TreeSet numbers = new TreeSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("TreeSet1: " + numbers); TreeSet 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); ) )
Output
TreeSet1: (1, 2, 3, 4) TreeSet2: (2, 3) Is TreeSet2 subset of TreeSet1? True
Other Methods of TreeSet
| Method | Description |
|---|---|
clone() | Creates a copy of the TreeSet |
contains() | Searches the TreeSet for the specified element and returns a boolean result |
isEmpty() | Checks if the TreeSet is empty |
size() | Returns the size of the TreeSet |
clear() | Removes all the elements from the TreeSet |
To learn more, visit Java TreeSet (official Java documentation).
TreeSet Vs. HashSet
Both the TreeSet as well as the HashSet implements the Set interface. However, there exist some differences between them.
- Unlike
HashSet, elements inTreeSetare stored in some order. It is becauseTreeSetimplements theSortedSetinterface as well. TreeSetprovides some methods for easy navigation. For example,first(),last(),headSet(),tailSet(), etc. It is becauseTreeSetalso implements theNavigableSetinterface.HashSetis faster than theTreeSetfor basic operations like add, remove, contains and size.
TreeSet Comparator
In all the examples above, tree set elements are sorted naturally. However, we can also customize the ordering of elements.
For this, we need to create our own comparator class based on which elements in a tree set are sorted. For example,
import java.util.TreeSet; import java.util.Comparator; class Main ( public static void main(String() args) ( // Creating a tree set with customized comparator TreeSet 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 ( @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; ) ) ) )
Output
TreeSet: (Zebra, Horse, Dog, Cat)
In the above example, we have created a tree set passing CustomComparator class as an argument.
Класът CustomComparator изпълнява Comparatorинтерфейса.
След това заместваме compare()метода. Сега методът ще сортира елементи в обратен ред.
За да научите повече, посетете Java Comparator (официална документация за Java).








