Класс TreeSet
Класс TreeSet в Java - это коллекция, которая реализует интерфейс Set и хранит элементы в отсортированном порядке. В отличие от HashSet, который не гарантирует порядок элементов, TreeSet автоматически сортирует элементы при добавлении. Сортировка происходит либо в естественном порядке (если элементы реализуют интерфейс Comparable), либо с использованием компаратора Comparator, который можно передать в конструктор. Класс не допускает хранения null (при попытке добавить null будет выброшено исключение NullPointerException) и не содержит дубликатов.
Синтаксис
TreeSet<Тип> имя = new TreeSet<>();
TreeSet<Тип> имя = new TreeSet<>(Comparator);
Пример
Давайте создадим TreeSet и добавим в него несколько чисел в произвольном порядке:
import java.util.TreeSet;
public class Main
{
public static void main(String[] args)
{
TreeSet<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(4);
set.add(2);
set.add(5);
System.out.println(set);
}
}
Результат выполнения кода:
[1, 2, 3, 4, 5]
Как видите, элементы автоматически отсортировались по возрастанию, несмотря на то, что добавлялись в другом порядке.
Пример
Давайте проверим, что TreeSet не хранит дубликаты и хранит строки в алфавитном порядке:
import java.util.TreeSet;
public class Main
{
public static void main(String[] args)
{
TreeSet<String> set = new TreeSet<>();
set.add("abcde");
set.add("12345");
set.add("abcde");
set.add("xyz");
System.out.println(set);
}
}
Результат выполнения кода:
[12345, abcde, xyz]
Пример
Давайте создадим TreeSet с компаратором для сортировки строк по убыванию:
import java.util.TreeSet;
import java.util.Comparator;
public class Main
{
public static void main(String[] args)
{
TreeSet<String> set = new TreeSet<>(Comparator.reverseOrder());
set.add("abcde");
set.add("12345");
set.add("xyz");
System.out.println(set);
}
}
Результат выполнения кода:
[xyz, abcde, 12345]