Java TreeSet volledig: Operaties, methoden en praktische voorbeelden
Java TreeSet
De TreeSet-klasse van het Java Collections Framework biedt de functionaliteit van een boomdatastructuur. Het implementeert de NavigableSet-interface.
Een TreeSet aanmaken
Om een tree set aan te maken, moet je het java.util.TreeSet-pakket importeren:
TreeSet<Integer> getallen = new TreeSet<>();
Standaard worden elementen natuurlijk gesorteerd (oplopend). Je kunt de sortering aanpassen met de Comparator-interface.
Methoden van TreeSet
Elementen toevoegen
add() – voegt het gespecificeerde element toe aan de setaddAll() – voegt alle elementen van de gespecificeerde collectie toe
import java.util.TreeSet;
class Main {
public static void main(String[] args) {
TreeSet<Integer> evenGetallen = new TreeSet<>();
evenGetallen.add(2);
evenGetallen.add(4);
evenGetallen.add(6);
System.out.println("TreeSet: " + evenGetallen);
TreeSet<Integer> getallen = new TreeSet<>();
getallen.add(1);
getallen.addAll(evenGetallen);
System.out.println("Nieuwe TreeSet: " + getallen);
}
}
Output
TreeSet: [2, 4, 6] Nieuwe TreeSet: [1, 2, 4, 6]
Elementen benaderen
Om elementen van een tree set te benaderen, kun je de iterator()-methode gebruiken:
import java.util.TreeSet;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
TreeSet<Integer> getallen = new TreeSet<>();
getallen.add(2);
getallen.add(5);
getallen.add(6);
System.out.println("TreeSet: " + getallen);
Iterator<Integer> iterator = getallen.iterator();
System.out.print("TreeSet met Iterator: ");
while (iterator.hasNext()) {
System.out.print(iterator.next() + ", ");
}
}
}
Output
TreeSet: [2, 5, 6] TreeSet met Iterator: 2, 5, 6,
Elementen verwijderen
remove() – verwijdert het gespecificeerde elementremoveAll() – verwijdert alle elementen uit de set
import java.util.TreeSet;
class Main {
public static void main(String[] args) {
TreeSet<Integer> getallen = new TreeSet<>();
getallen.add(2);
getallen.add(5);
getallen.add(6);
System.out.println("TreeSet: " + getallen);
boolean waarde1 = getallen.remove(5);
System.out.println("Is 5 verwijderd? " + waarde1);
boolean waarde2 = getallen.removeAll(getallen);
System.out.println("Zijn alle elementen verwijderd? " + waarde2);
}
}
Output
TreeSet: [2, 5, 6] Is 5 verwijderd? true Zijn alle elementen verwijderd? true
Navigatiemethoden
Omdat TreeSet NavigableSet implementeert, biedt het verschillende navigatiemethoden:
1. first() en last()
first() – retourneert het eerste elementlast() – retourneert het laatste element
2. ceiling(), floor(), higher() en lower()
- higher(element) – Laagste element groter dan het gespecificeerde element
- lower(element) – Grootste element kleiner dan het gespecificeerde element
- ceiling(element) – Laagste element groter dan of gelijk aan het element; retourneert het element zelf als het bestaat
- floor(element) – Grootste element kleiner dan of gelijk aan het element; retourneert het element zelf als het bestaat
import java.util.TreeSet;
class Main {
public static void main(String[] args) {
TreeSet<Integer> getallen = new TreeSet<>();
getallen.add(2);
getallen.add(5);
getallen.add(4);
getallen.add(6);
System.out.println("TreeSet: " + getallen);
System.out.println("Higher(4): " + getallen.higher(4));
System.out.println("Lower(4): " + getallen.lower(4));
System.out.println("Ceiling(4): " + getallen.ceiling(4));
System.out.println("Floor(3): " + getallen.floor(3));
}
}
Output
TreeSet: [2, 4, 5, 6] Higher(4): 5 Lower(4): 2 Ceiling(4): 4 Floor(3): 2
3. pollFirst() en pollLast()
pollFirst() – retourneert en verwijdert het eerste elementpollLast() – retourneert en verwijdert het laatste element
4. headSet(), tailSet() en subSet()
Deze methoden werken analoog aan NavigableSet met optionele boolean-parameters voor inclusie/exclusie van grenzen.
Set-operaties
TreeSet ondersteunt standaard set-operaties:
Unie van sets
Gebruik addAll() voor de unie.
Intersectie van sets
Gebruik retainAll() voor de intersectie.
Verschil van sets
Gebruik removeAll() voor het verschil.
Subset controleren
Gebruik containsAll() om te controleren of een set een subset is van een andere.
Overige methoden
| Methode | Beschrijving |
|---|---|
clone() | Maakt een kopie van de TreeSet |
contains() | Zoekt een element en retourneert boolean |
isEmpty() | Controleert of de TreeSet leeg is |
size() | Retourneert de grootte van de TreeSet |
clear() | Maakt de TreeSet leeg |
TreeSet vs HashSet
TreeSethoudt elementen gesorteerd (implementeertSortedSet)TreeSetbiedt navigatiemethoden (implementeertNavigableSet)HashSetis sneller voor basisoperaties (add, remove, contains, size)
TreeSet met Comparator
Je kunt de ordening aanpassen met een eigen Comparator:
import java.util.TreeSet;
import java.util.Comparator;
class Main {
public static void main(String[] args) {
TreeSet<String> dieren = new TreeSet<>(new CustomComparator());
dieren.add("Hond");
dieren.add("Zebra");
dieren.add("Kat");
dieren.add("Paard");
System.out.println("TreeSet: " + dieren);
}
static class CustomComparator implements Comparator<String> {
@Override
public int compare(String dier1, String dier2) {
int waarde = dier1.compareTo(dier2);
// Omgekeerde volgorde
if (waarde > 0) return -1;
else if (waarde < 0) return 1;
else return 0;
}
}
}
Output
TreeSet: [Zebra, Paard, Hond, Kat]
De CustomComparator-klasse implementeert Comparator en overschrijft compare() voor omgekeerde sortering.
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
- Java Collection-algoritmes: Sorteren, shuffelen en meer
- Willekeurige Getallen Genereren in Java: Praktische Gids met Random en Math.random