Java TreeSet
Java TreeSet
In deze zelfstudie leren we over de Java TreeSet-klasse en zijn verschillende bewerkingen en methoden met behulp van voorbeelden.
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 de java.util.TreeSet
. importeren pakket eerst.
Zodra we het pakket hebben geïmporteerd, kunnen we als volgt een TreeSet
. maken in Java.
TreeSet<Integer> numbers = new TreeSet<>();
Hier hebben we een TreeSet
. gemaakt zonder enige argumenten. In dit geval zijn de elementen in TreeSet
worden op natuurlijke wijze gesorteerd (oplopende volgorde).
We kunnen de sortering van elementen echter aanpassen met behulp van de Comparator
koppel. We zullen er later in deze tutorial meer over leren.
Methoden van TreeSet
De TreeSet
class biedt verschillende methoden waarmee we verschillende bewerkingen op de set kunnen uitvoeren.
Elementen invoegen in TreeSet
add()
- voegt het opgegeven element toe aan de setaddAll()
- voegt alle elementen van de opgegeven verzameling toe aan de set
Bijvoorbeeld,
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);
}
}
Uitvoer
TreeSet: [2, 4, 6] New TreeSet: [1, 2, 4, 6]
Toegang tot TreeSet-elementen
Om toegang te krijgen tot de elementen van een boomset, kunnen we de iterator()
. gebruiken methode. Om deze methode te gebruiken, moeten we java.util.Iterator
. importeren pakket. Bijvoorbeeld,
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(", ");
}
}
}
Uitvoer
TreeSet: [2, 5, 6] TreeSet using 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<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);
}
}
Uitvoer
TreeSet: [2, 5, 6] Is 5 removed? true Are all elements removed? true
Methoden voor navigatie
Sinds de TreeSet
klasse implementeert NavigableSet
, het biedt verschillende methoden om door de elementen van de boomset te navigeren.
1. first() en last() 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<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);
}
}
Uitvoer
TreeSet: [2, 5, 6] First Number: 2 Last Number: 6
2. plafond(), vloer(), hoger() en lager() Methoden
- hoger(element) - Retourneert het laagste element van de elementen die groter zijn dan de opgegeven
element
. - lager(element) - Retourneert het grootste element van de elementen die kleiner zijn dan de opgegeven
element
. - plafond(element) - Retourneert het laagste element van de elementen die groter zijn dan het opgegeven element . Als het element doorgegeven bestaat in een boomset, het retourneert de
element
doorgegeven als argument. - vloer(element) - Retourneert het grootste element van de elementen die kleiner zijn dan de opgegeven
element
. Als het element doorgegeven bestaat in een boomset, het retourneert deelement
doorgegeven als argument.
Bijvoorbeeld,
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));
}
}
Uitvoer
TreeSet: [2, 4, 5, 6] Using higher: 5 Using lower: 2 Using ceiling: 4 Using floor: 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<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);
}
}
Uitvoer
TreeSet: [2, 4, 5, 6] Removed First Element: 2 Removed Last Element: 6 New TreeSet: [4, 5]
4. headSet(), tailSet() en subSet() Methoden
headSet(element, booleanValue)
De headSet()
methode retourneert alle elementen van een boom die is geplaatst vóór het opgegeven element (wat als argument wordt doorgegeven).
De booleanValue parameter is optioneel. De standaardwaarde is false
.
Als true
wordt doorgegeven als een booleanValue , retourneert de methode alle elementen vóór het gespecificeerde element inclusief het gespecificeerde element.
Bijvoorbeeld,
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));
}
}
Uitvoer
TreeSet: [2, 4, 5, 6] Using headSet without boolean value: [2, 4] Using headSet with boolean value: [2, 4, 5]
tailSet(element, booleanValue)
De tailSet()
methode retourneert alle elementen van een boomset na het opgegeven element (die als parameter wordt doorgegeven) inclusief het opgegeven element .
De booleanValue parameter is optioneel. De standaardwaarde is true
.
Als false
wordt doorgegeven als een booleanValue , retourneert de methode alle elementen na het opgegeven element zonder het opgegeven element op te nemen .
Bijvoorbeeld,
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));
}
}
Uitvoer
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)
De subSet()
methode retourneert alle elementen tussen e1 en e2 inclusief e1 .
De bv1 en bv2 zijn optionele parameters. De standaardwaarde van bv1 is true
, en de standaardwaarde van bv2 is false
.
Als false
wordt doorgegeven als bv1 , retourneert de methode alle elementen tussen e1 en e2 zonder e1
.
Als true
wordt doorgegeven als bv2 , retourneert de methode alle elementen tussen e1 en e2 , inclusief e1 .
Bijvoorbeeld,
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));
}
}
Uitvoer
TreeSet: [2, 4, 5, 6] Using subSet without boolean value: [4, 5] Using subSet with boolean value: [5, 6]
Bewerkingen instellen
De methoden van de TreeSet
class kan ook worden gebruikt om verschillende set-bewerkingen uit te voeren.
Union van Sets
Om de unie tussen twee sets uit te voeren, gebruiken we de addAll()
methode. Bijvoorbeeld,
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);
}
}
Uitvoer
TreeSet1: [2, 4] TreeSet2: [1, 2, 3] Union is: [1, 2, 3, 4]
Kruispunt van verzamelingen
Om de kruising tussen twee sets uit te voeren, gebruiken we de retainAll()
methode. Bijvoorbeeld,
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);
}
}
Uitvoer
TreeSet1: [2, 4] TreeSet2: [1, 2, 3] Intersection is: [2]
Verschil van sets
Om het verschil tussen de twee sets te berekenen, kunnen we de removeAll()
. gebruiken methode. Bijvoorbeeld,
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);
}
}
Uitvoer
TreeSet1: [2, 4] TreeSet2: [1, 2, 3, 4] Difference is: [1, 3]
Subset van een set
Om te controleren of een set een subset is van een andere set of niet, gebruiken we de containsAll()
methode. Bijvoorbeeld,
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);
}
}
Uitvoer
TreeSet1: [1, 2, 3, 4] TreeSet2: [2, 3] Is TreeSet2 subset of TreeSet1? True
Andere methoden van TreeSet
Methode | Beschrijving |
---|---|
clone() | Maakt een kopie van de TreeSet |
contains() | Zoekt in de TreeSet naar het opgegeven element en geeft een booleaans resultaat |
isEmpty() | Controleert of de TreeSet is leeg |
size() | Retourneert de grootte van de TreeSet |
clear() | Verwijdert alle elementen uit de TreeSet |
Ga voor meer informatie naar Java TreeSet (officiële Java-documentatie).
TreeSet vs. HashSet
Zowel de TreeSet
evenals de HashSet
implementeert de Set
koppel. Er bestaan echter enkele verschillen tussen hen.
- In tegenstelling tot
HashSet
, elementen inTreeSet
worden in een bepaalde volgorde opgeslagen. Het is omdatTreeSet
implementeert deSortedSet
interface ook. TreeSet
biedt enkele methoden voor eenvoudige navigatie. Bijvoorbeeldfirst()
,last()
,headSet(
),tailSet()
, enz. Het is omdatTreeSet
implementeert ook deNavigableSet
interface.HashSet
is sneller dan deTreeSet
voor basisbewerkingen zoals toevoegen, verwijderen, bevat en grootte.
TreeSet-vergelijker
In alle bovenstaande voorbeelden zijn boomset-elementen natuurlijk gesorteerd. We kunnen echter ook de volgorde van elementen aanpassen.
Hiervoor moeten we onze eigen comparatorklasse maken op basis van welke elementen in een boomset worden gesorteerd. Bijvoorbeeld,
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;
}
}
}
}
Uitvoer
TreeSet: [Zebra, Horse, Dog, Cat]
In het bovenstaande voorbeeld hebben we een boomset gemaakt die door CustomComparator . gaat class als argument.
De CustomComparator class implementeert de Comparator
interface.
We overschrijven dan de compare()
methode. De methode sorteert nu elementen in omgekeerde volgorde.
Ga voor meer informatie naar Java Comparator (officiële Java-documentatie).
Java