In deze tutorial leren we met behulp van voorbeelden over de Java TreeSet-klasse en de verschillende bewerkingen en methoden.
De TreeSet
klasse van het Java-verzamelingsraamwerk biedt de functionaliteit van een boomgegevensstructuur.
Het breidt de NavigableSet-interface uit.
Een TreeSet maken
Om een boomset te maken, moeten we het java.util.TreeSet
pakket eerst importeren .
Nadat we het pakket hebben geïmporteerd, kunnen we als volgt een TreeSet
in Java maken.
TreeSet numbers = new TreeSet();
Hier hebben we een gemaakt TreeSet
zonder argumenten. In dit geval worden de elementen in TreeSet
natuurlijk gesorteerd (oplopende volgorde).
We kunnen het sorteren van elementen echter aanpassen door de Comparator
interface te gebruiken. We zullen er later in deze tutorial over leren.
Methoden van TreeSet
De TreeSet
klasse biedt verschillende methoden waarmee we verschillende bewerkingen op de set kunnen uitvoeren.
Voeg elementen in TreeSet in
add()
- voegt het opgegeven element toe aan de setaddAll()
- voegt alle elementen van de opgegeven collectie toe aan de set
Bijvoorbeeld,
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); ) )
Uitvoer
TreeSet: (2, 4, 6) Nieuwe TreeSet: (1, 2, 4, 6)
Toegang tot TreeSet Elements
Om toegang te krijgen tot de elementen van een boomset, kunnen we de iterator()
methode gebruiken. Om deze methode te gebruiken, moeten we een java.util.Iterator
pakket importeren . Bijvoorbeeld,
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(", "); ) ) )
Uitvoer
TreeSet: (2, 5, 6) TreeSet met Iterator: 2, 5, 6,
Elementen verwijderen
remove()
- verwijdert het opgegeven element uit de setremoveAll()
- verwijdert alle elementen uit de set
Bijvoorbeeld,
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); ) )
Uitvoer
TreeSet: (2, 5, 6) Is 5 verwijderd? true Zijn alle elementen verwijderd? waar
Methoden voor navigatie
Aangezien de TreeSet
klasse implementeert NavigableSet
, biedt het verschillende methoden om door de elementen van de boomset te navigeren.
1. eerste () en laatste () methoden
first()
- geeft het eerste element van de set teruglast()
- geeft het laatste element van de set terug
Bijvoorbeeld,
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); ) )
Uitvoer
TreeSet: (2, 5, 6) Eerste nummer: 2 Laatste nummer: 6
2. plafond (), vloer (), hoger () en lager () methoden
- hoger (element) - Retourneert het laagste element van de elementen die groter zijn dan het opgegeven
element
. - lower (element) - Retourneert het grootste element van de elementen die kleiner zijn dan het opgegeven
element
. - plafond (element) - Retourneert het laagste element van de elementen die groter zijn dan het opgegeven element. Als het doorgegeven element in een boomverzameling voorkomt, retourneert het het
element
doorgegeven als een argument. - floor (element) - Retourneert het grootste element van de elementen die kleiner zijn dan het opgegeven
element
. Als het doorgegeven element in een boomverzameling voorkomt, retourneert het hetelement
doorgegeven als een argument.
Bijvoorbeeld,
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)); ) )
Uitvoer
TreeSet: (2, 4, 5, 6) Hoger gebruiken: 5 Lager gebruiken: 2 Plafond gebruiken: 4 Vloer gebruiken: 2
3. pollfirst () en pollLast () methoden
pollFirst()
- retourneert en verwijdert het eerste element uit de setpollLast()
- retourneert en verwijdert het laatste element uit de set
Bijvoorbeeld,
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); ) )
Uitvoer
TreeSet: (2, 4, 5, 6) Removed First Element: 2 Removed Last Element: 6 New TreeSet: (4, 5)
4. headSet(), tailSet() and subSet() Methods
headSet(element, booleanValue)
The headSet()
method returns all the elements of a tree set before the specified element (which is passed as an argument).
The booleanValue parameter is optional. Its default value is false
.
If true
is passed as a booleanValue, the method returns all the elements before the specified element 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 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)); ) )
Output
TreeSet: (2, 4, 5, 6) Using headSet without boolean value: (2, 4) Using headSet with boolean value: (2, 4, 5)
tailSet(element, 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 inTreeSet
are stored in some order. It is becauseTreeSet
implements theSortedSet
interface as well. TreeSet
provides some methods for easy navigation. For example,first()
,last()
,headSet(
),tailSet()
, etc. It is becauseTreeSet
also implements theNavigableSet
interface.HashSet
is faster than theTreeSet
for 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.
De CustomComparator-klasse implementeert de Comparator
interface.
We overschrijven dan de compare()
methode. De methode sorteert nu elementen in omgekeerde volgorde.
Bezoek voor meer informatie Java Comparator (officiële Java-documentatie).