Рубрики
Без рубрики

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

Набор деревьев Java, набор сортировок Java, Набор сортировок Java, Пример набора деревьев Java, Сопоставимый компаратор набора деревьев Java, набор сортировок против набора деревьев, метод реализации набора деревьев

Автор оригинала: Pankaj Kumar.

Набор деревьев Java является наиболее популярной реализацией java.util.Сортированный набор . SortedSet-это интерфейс , который расширяет java.util.Установить . Сортированный набор Java обеспечивает полное упорядочение его элементов.

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

Другими словами, при повторении набора деревьев мы можем ожидать отсортированных данных. Элементы набора деревьев Java упорядочены в соответствии с их естественным порядком, или мы можем предоставить Компаратор при создании сортированного набора . Если мы не предоставляем конкретный компаратор во время создания набора, элементы должны реализовать сопоставимость, чтобы обеспечить естественный порядок.

Конструкторы наборов деревьев Java

Набор деревьев является очень популярной реализацией SortedSet . Согласно спецификации, все классы реализации отсортированного набора должны содержать 4 типа конструкторов.

  1. Конструктор void (без аргументов): Он должен создать отсортированное множество, которое сортируется в соответствии с естественным порядком его элементов.
  2. Конструктор с аргументом типа Comparator: Он должен создать отсортированное множество, которое сортируется в соответствии с предоставленным Компаратором.
  3. Конструктор с аргументом типа Collection: Он должен создать отсортированное множество с элементами предоставленной коллекции, которое сортируется в соответствии с естественным порядком элементов.
  4. Конструктор с аргументом типа SortedSet: Он должен вести себя как конструктор копирования и создавать новый отсортированный набор с теми же элементами и тем же порядком предоставленного отсортированного набора.

К сожалению, интерфейсы не могут содержать конструкторов. Таким образом, нет никакого способа обеспечить выполнение этих рекомендаций.

Пример набора деревьев Java

Теперь давайте создадим сортированный набор различными способами, как упоминалось ранее, мы рассмотрим различные примеры набора деревьев java.

// Create a sorted set of Integers
SortedSet setWithNaturalOrdering = new TreeSet<>();
setWithNaturalOrdering.add(5);
setWithNaturalOrdering.add(9);
setWithNaturalOrdering.add(4);
setWithNaturalOrdering.add(2);
setWithNaturalOrdering.forEach(System.out::println);

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

Сопоставимый набор деревьев Java

Теперь мы создадим сортированный набор с объектами Person класса. Чтобы обеспечить естественный порядок Человек класс должен иметь реализацию Сопоставимого интерфейса.

class Person implements Comparable {
    int id;
    String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public int compareTo(Person p) {
        return this.name.compareTo(p.name);
    }

    @Override
    public String toString() {
        return this.name;
    }
}
// Create a sorted set with user defined class
SortedSet sortedSet = new TreeSet<>();
sortedSet.add(new Person(1, "Mark"));
sortedSet.add(new Person(2, "Vispi"));
sortedSet.add(new Person(3, "Harmony"));
sortedSet.forEach(System.out::println);

Выход:

Harmony
Mark
Vispi

Компаратор наборов деревьев Java

Чтобы обеспечить другой порядок, нам нужно передать пользовательскую реализацию компаратора при создании отсортированного набора. Например, давайте отсортируем набор в соответствии с атрибутом id класса Person.

// we can also provide instance of Comparator implementation instead of lambda
SortedSet customOrderedSet = new TreeSet<>((p1, p2) -> p1.id - p2.id);
customOrderedSet.addAll(sortedSet);
customOrderedSet.forEach(System.out::println);

Пример набора сортировки Java

Мы также можем создать сортированный набор, передав другой объект коллекции или другой сортированный набор.

List listOfPerson = Arrays.asList(new Person(1, "Mark"), new Person(2, "Vispi"), new Person(3, "Harmony"));
SortedSet sortedSetFromCollection = new TreeSet<>(listOfPerson);
SortedSet copiedSet = new TreeSet<>(sortedSetFromCollection);
copiedSet.forEach(System.out::println);

В обоих случаях мы получаем следующий результат:

Harmony
Mark
Vispi

Методы Java SortedSet

SortedSet, безусловно, получает некоторые дополнительные привилегии по сравнению с Set из-за его отсортированного характера. Как вы, возможно, уже догадались, помимо унаследованных методов из интерфейса набора, он также предоставляет несколько дополнительных методов.

  1. Компаратор super E> comparator() : Возвращает экземпляр компаратора, используемый для упорядочения элементов в наборе. Если элементы отсортированы в соответствии с их естественным порядком, он возвращает значение null. super E> comparator()
  2. : Возвращает экземпляр компаратора, используемый для упорядочения элементов в наборе. Если элементы отсортированы в соответствии с их естественным порядком, он возвращает значение null. SortedSet Подмножество(E из элемента, E в элемент)
  3. : Возвращает часть этого набора для заданного диапазона. (Элемент fromElement является включающим, в то время как элемент toElement является исключительным). Обратите внимание, что он возвращает представление подмножества. Таким образом, изменения, выполненные в возвращенном наборе, отражаются в фактическом наборе. SortedSet Гарнитура(элемент E toElement)
  4. : Возвращает представление части этого набора, элементы которой строго меньше элемента toElement. SortedSet Хвостовой набор(E из элемента)
  5. : Возвращает представление части этого набора, элементы которой больше или равны элементу из элемента. E first()
  6. : Возвращает первый элемент набора, который является самым низким элементом в наборе. E last()

Реализация Java SortedSet

Давайте рассмотрим эти методы на примере. Мы создадим сортированный набор, передав компаратор. Здесь comparator() метод вернет тот же компаратор:

SortedSet intSet = new TreeSet<>(Comparator.naturalOrder());
intSet.addAll(Arrays.asList(7,2,1,4,6,5));
Comparator comparator = intSet.comparator();

Теперь давайте найдем подмножество, используя метод Подмножество(от, до) . Обратите внимание, что изменения, внесенные в подмножество, также отражаются на исходном наборе.

SortedSet subSet = intSet.subSet(2, 5);
System.out.println(subSet);
subSet.add(3);
System.out.println(intSet);

Выход:

[2, 4]
[1, 2, 3, 4, 5, 6, 7]

Аналогичным образом, давайте проверим другие методы:

subSet = intSet.headSet(3);
System.out.println("Head set");
System.out.println(subSet);

subSet = intSet.tailSet(3);
System.out.println("Tail set");
System.out.println(subSet);

System.out.println("Retrieving lowest and highest elements respectively");
System.out.println(intSet.first());
System.out.println(intSet.last());

Выход:

Head set
[1, 2]
Tail set
[3, 4, 5, 6, 7]
Retrieving lowest and highest elements respectively
1
7

Это все для набора деревьев Java или набора сортировки java.

Ссылка: API Doc