Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Набор деревьев Java

Набор деревьев Java

В этом руководстве мы узнаем о классе Java TreeSet и его различных операциях и методах с помощью примеров.

TreeSet класс платформы коллекций Java обеспечивает функциональность древовидной структуры данных.

Он расширяет интерфейс NavigableSet.

<час>

Создание TreeSet

Чтобы создать набор деревьев, мы должны импортировать java.util.TreeSet сначала пакет.

Как только мы импортируем пакет, вот как мы можем создать TreeSet на Java.


TreeSet<Integer> numbers = new TreeSet<>();

Здесь мы создали TreeSet без всяких аргументов. В этом случае элементы в TreeSet сортируются естественным образом (по возрастанию).

Однако мы можем настроить сортировку элементов с помощью Comparator интерфейс. Мы узнаем об этом позже в этом руководстве.

<час>

Методы TreeSet

TreeSet класс предоставляет различные методы, которые позволяют нам выполнять различные операции над набором.

<час>

Вставить элементы в TreeSet

Например,

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);
    }
}

Вывод

TreeSet: [2, 4, 6]
New TreeSet: [1, 2, 4, 6]
<час>

Доступ к элементам TreeSet

Чтобы получить доступ к элементам набора деревьев, мы можем использовать iterator() метод. Чтобы использовать этот метод, мы должны импортировать java.util.Iterator упаковка. Например,

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(", ");
        }
    }
}

Вывод

TreeSet: [2, 5, 6]
TreeSet using Iterator: 2, 5, 6,
<час>

Удалить элементы

Например,

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);
    }
}

Вывод

TreeSet: [2, 5, 6]
Is 5 removed? true
Are all elements removed? true
<час>

Поскольку TreeSet класс реализует NavigableSet , он предоставляет различные методы для навигации по элементам древовидного набора.

1. Методы first() и last()

Например,

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);
    }
}

Вывод

TreeSet: [2, 5, 6]
First Number: 2
Last Number: 6
<час>

2. Методы потолка(), пола(), выше() и ниже()

Например,

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));

    }
}

Вывод

TreeSet: [2, 4, 5, 6]
Using higher: 5
Using lower: 2
Using ceiling: 4
Using floor: 2
<час>

3. Методы pollfirst() и pollLast()

Например,

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);
    }
}

Вывод

TreeSet: [2, 4, 5, 6]
Removed First Element: 2
Removed Last Element: 6
New TreeSet: [4, 5]
<час>

4. Методы headSet(), tailSet() и subSet()

<час>

headSet(элемент, логическое значение)

headSet() метод возвращает все элементы набора дерева до указанного элемента (который передается в качестве аргумента).

логическое значение параметр является необязательным. Его значение по умолчанию — false. .

Если true передается как booleanValue , метод возвращает все элементы до указанного элемента, включая указанный элемент.

Например,

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));
    }
}

Вывод

TreeSet: [2, 4, 5, 6]
Using headSet without boolean value: [2, 4]
Using headSet with boolean value: [2, 4, 5]
<час>

tailSet(элемент, логическое значение)

tailSet() метод возвращает все элементы набора дерева после указанного элемента (который передается как параметр), включая указанный элемент .

логическое значение параметр является необязательным. Его значение по умолчанию — true. .

Если false передается как booleanValue , метод возвращает все элементы после указанного element без включения указанного элемента .

Например,

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));
    }
}

Вывод

TreeSet: [2, 4, 5, 6]
Using tailSet without boolean value: [4, 5, 6]
Using tailSet with boolean value: [5, 6]
<час>

поднабор(e1, bv1, e2, bv2)

subSet() метод возвращает все элементы между e1 и e2 включая e1 .

bv1 и bv2 являются необязательными параметрами. Значение по умолчанию bv1 это true , и значение по умолчанию bv2 это false .

Если false передается как bv1 , метод возвращает все элементы между e1 и e2 без включения e1 .

Если true передается как bv2 , метод возвращает все элементы между e1 и e2 , включая e1 .

Например,

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));
    }
}

Вывод

TreeSet: [2, 4, 5, 6]
Using subSet without boolean value: [4, 5]
Using subSet with boolean value: [5, 6]
<час>

Операции с наборами

Методы TreeSet class также можно использовать для выполнения различных операций над множествами.

<час>

Союз наборов

Чтобы выполнить объединение двух наборов, мы используем addAll() метод. Например,

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);

    }
}

Вывод

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3]
Union is: [1, 2, 3, 4]
<час>

Пересечение наборов

Чтобы выполнить пересечение двух множеств, мы используем retainAll() метод. Например,

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);
    }
}

Вывод

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3]
Intersection is: [2]
<час>

Разница наборов

Чтобы вычислить разницу между двумя наборами, мы можем использовать removeAll() метод. Например,

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);
    }
}

Вывод

TreeSet1: [2, 4]
TreeSet2: [1, 2, 3, 4]
Difference is: [1, 3]
<час>

Подмножество набора

Чтобы проверить, является ли набор подмножеством другого набора, мы используем containsAll() метод. Например,

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);
    }
}

Вывод

TreeSet1: [1, 2, 3, 4]
TreeSet2: [2, 3]
Is TreeSet2 subset of TreeSet1? True
<час>

Другие методы TreeSet

Метод Описание
clone() Создает копию TreeSet
contains() Ищет в TreeSet указанный элемент и возвращает логический результат
isEmpty() Проверяет, соответствует ли TreeSet пусто
size() Возвращает размер TreeSet
clear() Удаляет все элементы из TreeSet

Чтобы узнать больше, посетите сайт Java TreeSet (официальная документация по Java).

<час>

TreeSet vs. Набор хешей

Оба TreeSet а также HashSet реализует Set интерфейс. Однако между ними существуют некоторые различия.

<час>

Компаратор TreeSet

Во всех приведенных выше примерах элементы набора деревьев сортируются естественным образом. Однако мы также можем настроить порядок элементов.

Для этого нам нужно создать собственный класс компаратора на основе того, какие элементы в древовидном наборе сортируются. Например,

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;
            }
        }
    }
}

Вывод

TreeSet: [Zebra, Horse, Dog, Cat]

В приведенном выше примере мы создали набор деревьев, передав CustomComparator класс в качестве аргумента.

Пользовательский компаратор класс реализует Comparator интерфейс.

Затем мы переопределяем compare() метод. Теперь метод будет сортировать элементы в обратном порядке.

Чтобы узнать больше, посетите Java Comparator (официальная документация по Java).


java

  1. Операторы Java
  2. Java-комментарии
  3. Java для каждого цикла
  4. Java-строки
  5. Java-интерфейс
  6. Анонимный класс Java
  7. Java-проба с ресурсами
  8. Java-аннотации
  9. Утверждения Java
  10. Java-алгоритмы