Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

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 set
  • addAll() - 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 set
  • removeAll() - 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

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 terug
  • last() - 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 de element 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 set
  • pollLast() - 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 in TreeSet worden in een bepaalde volgorde opgeslagen. Het is omdat TreeSet implementeert de SortedSet interface ook.
  • TreeSet biedt enkele methoden voor eenvoudige navigatie. Bijvoorbeeld first() , last() , headSet( ), tailSet() , enz. Het is omdat TreeSet implementeert ook de NavigableSet interface.
  • HashSet is sneller dan de TreeSet 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

  1. Java-operators
  2. Java-opmerkingen
  3. Java voor elke lus
  4. Java-strings
  5. Java-interface
  6. Java anonieme klasse
  7. Java proberen-met-bronnen
  8. Java-annotaties
  9. Java-beweringen
  10. Java-algoritmen
  11. Willekeurige getallen genereren in Java