treeset java tutorial with programming examples
Цей підручник пояснює все про клас TreeSet, реалізацію, ітерацію, приклади TreeSet проти HashSet, приклади Java TreeSet тощо:
TreeSet в Java реалізує інтерфейс Set (більш конкретно SortedSet). TreeSet використовує TreeMap внутрішньо для зберігання даних. За замовчуванням об'єкти або елементи TreeSet зберігаються відповідно до природного порядку у порядку зростання.
Клас TreeSet, який реалізує TreeSet в Java, реалізує інтерфейс ‘NavigableSet’, а також успадковує клас AbstractSet.
=> Перегляньте тут, щоб побачити A-Z навчальних посібників з навчання Java тут.
Що ви дізнаєтесь:
TreeSet в Java
Зауважте, що елементи TreeSet також можна чітко впорядкувати, надавши налаштований компаратор під час створення об’єкта TreeSet за допомогою конкретного прототипу конструктора.
Нижче наведено деякі важливі характеристики TreeSet:
- Клас TreeSet реалізує інтерфейс SortedSet. Він не дозволяє дублювати елементи.
- Клас TreeSet не синхронізований.
- TreeSet не зберігає порядок вставки, але елементи в TreeSet сортуються відповідно до природного впорядкування.
- TreeSet можна замовити за допомогою спеціального компаратора під час створення об’єкта TreeSet.
- TreeSet зазвичай використовується для зберігання величезної кількості інформації, яка відсортована природним шляхом. Це сприяє легкому та швидшому доступу.
Декларація класу TreeSet
Java пропонує клас під назвою 'TreeSet', який містить функціональність структури даних TreeSet. Клас TreeSet є частиною пакету java.util.
Щоб включити клас TreeSet до програми Java, ми повинні використовувати оператор імпорту, як зазначено нижче:
import java.util.TreeSet;
або
import java.util.*;
Загальним оголошенням класу TreeSet є:
public class TreeSet extends AbstractSet implements NavigableSet, Cloneable, Serializable
Як видно з оголошення класу, клас TreeSet розширює AbstractSet та реалізує інтерфейси NavigableSet, Cloneable та Serializable.
Ієрархія класів для класу TreeSet наведена нижче:
Внутрішнє впровадження
Ми знаємо, що TreeSet реалізує інтерфейс NavigableSet і розширює клас SortedSet.
Внутрішньо конструктор TreeSet визначається наступним чином:
public TreeSet() { this(new TreeMap()); }
Як видно з наведеного вище визначення конструктора TreeSet, викликається об'єкт TreeMap. Таким чином, внутрішньо, це об’єкт TreeMap, який реалізований для TreeSet. Отже, під час додавання елемента до TreeSet, до TreeMap додається ключ, в якому ключі сортуються за замовчуванням.
Згідно Документація Oracle щодо TreeSet ,
'TreeSet - це реалізація NavigableSet, заснована на TreeMap.'
Приклад Java TreeSet
Наступна програма Java показує простий приклад, який демонструє TreeSet. У цій програмі ми визначили простий Color TreeSet. Ми додаємо до нього елементи, а потім відображаємо. Зверніть увагу, що елементи відображаються відповідно до природного впорядкування.
import java.util.*; class Main{ public static void main(String args()){ //Create and add elements to TreeSet TreeSet color_TreeSet=new TreeSet(); color_TreeSet.add('Red'); color_TreeSet.add('Green'); color_TreeSet.add('Blue'); color_TreeSet.add('Yellow'); //Traverse the TreeSet and print elements one by one System.out.println('TreeSet Contents:'); Iterator iter=color_TreeSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
Вихід:
Зміст TreeSet:
Синій Зелений Червоний Жовтий
Ітерація через TreeSet
Щоб отримати доступ до окремих елементів TreeSet, нам потрібно виконати ітерацію через TreeSet або іншими словами, пройти через TreeSet.
Ми робимо це, оголошуючи ітератор для TreeSet, а потім використовуємо цей ітератор для доступу до кожного елемента. Для цього ми використовуємо метод next () ітератора, який повертає наступний елемент у TreeSet.
Наступна програма Java демонструє використання Iterator для ітерації через TreeSet.
import java.util.TreeSet; import java.util.Iterator; class Main { public static void main(String() args) { //create and initialize TreeSet TreeSet num_Treeset = new TreeSet(); num_Treeset.add(20); num_Treeset.add(5); num_Treeset.add(15); num_Treeset.add(25); num_Treeset.add(10); System.out.println('TreeSet: ' + num_Treeset); // Call iterator() method to define Iterator for TreeSet Iterator iter_set = num_Treeset.iterator(); System.out.print('TreeSet using Iterator: '); // Access TreeSet elements using Iterator while(iter_set.hasNext()) { System.out.print(iter_set.next()); System.out.print(', '); } } }
Вихід:
TreeSet: (5, 10, 15, 20, 25)
TreeSet за допомогою ітератора: 5, 10, 15, 20, 25,
шаблон матриці простежуваності вимоги з прикладом
Порівняльник TreeSet в Java
За замовчуванням TreeSet є природним чином упорядкованим. Ми також можемо сортувати TreeSet в індивідуальному порядку, визначивши новий клас порівняння. У цьому класі порівняння нам потрібно замінити метод порівняння, щоб сортувати елементи TreeSet. Потім цей об’єкт порівняння передається конструктору TreeSet.
Наступна програма Java показує використання компаратора для сортування TreeSet.
import java.util.TreeSet; import java.util.Comparator; class Main { public static void main(String() args) { // Create a TreeSet with user-defined comparator TreeSet cities = new TreeSet(new cities_Comparator()); //add elements to the comparator cities.add('Pune'); cities.add('Hyderabad'); cities.add('Indore'); cities.add('Bangaluru'); //print the contents of TreeSet System.out.println('TreeSet: ' + cities); } // Create a comparator class public static class cities_Comparator implements Comparator { //override compare method to compare two elements of the TreeSet @Override public int compare(String cities_one, String cities_two) { int value = cities_one.compareTo(cities_two); // sort elements in reverse order if (value > 0) { return -1; } else if (value <0) { return 1; } else { return 0; } } } }
Вихід:
TreeSet: (Пуна, Індор, Хайдарабад, Бангалур)
Вищевказана програма реалізує клас Comparator для сортування заданого TreeSet за алфавітом у зворотному порядку.
Рекомендована література = >> Інтерфейс Java Comparator
API TreeSet / Методи та конструктори
У цьому розділі ми обговоримо API класу TreeSet. Тут ми обговоримо конструктори та методи, надані класом TreeSet.
Клас TreeSet надає перевантажені конструктори для побудови об'єкта TreeSet.
Ми побудували таблиці таких конструкторів наступним чином:
Конструктори
Прототип конструктора | Опис | |
---|---|---|
містить | boolean містить (Об'єкт o) | Перевіряє, чи містить TreeSet заданий елемент; істина, якщо присутня. |
TreeSet () | Конструктор за замовчуванням для створення нового, порожнього об'єкта TreeSet. | |
TreeSet (Колекція c) | Створює новий об’єкт TreeSet, що містить елементи із заданої колекції c, відсортовані за природним впорядкуванням. | |
TreeSet (Компаратор-компаратор) | Конструює новий об’єкт TreeSet, який є порожнім і буде відсортовано відповідно до вказаного компаратора. | |
TreeSet (SortedSet s) | Створює новий об’єкт TreeSet, який містить елементи із заданих sortedSet s. |
Методи
Далі давайте розкладемо таблиці на різні методи, передбачені класом TreeSet.
Метод | Метод-прототип | Опис |
---|---|---|
додати | логічне додавання (E e) | Додає даний елемент до TreeSet, якщо його ще немає. |
addAll | boolean addAll (Колекція c) | Додає всі елементи даної колекції c до набору. |
стеля | E стеля (E e) | Повертає елемент, більший або рівний e (найменший елемент); або нуль, якщо жодного елемента немає. |
ясно | void clear () | Видаляє всі елементи з TreeSet. |
клон | Клон об'єкта () | Повертає дрібну копію об'єкта TreeSet. |
компаратор | Компаратор компаратор () | Повертає компаратор для TreeSet або null, якщо використовується природне впорядкування. |
спаднийIterator | Ітератор за спаданням Ітератор () | Повертає спадний ітератор над елементами у TreeSet. |
за спаданням Set | NavigableSet низхіднийSet () | Повертає подання елементів у TreeSet у зворотному порядку. |
спочатку | E спочатку () | Повертає перший або найнижчий елемент у TreeSet. |
підлога | E поверх (E e) | Повертає елемент, який менше або дорівнює даному елементу e у TreeSet. Повертає нуль, якщо такого елемента немає. |
headSet | SortedSet headSet (E toElement) | повертає набір елементів, які суворо менше, ніж заданий toElement |
NavigableSet headSet (E toElement, логічно включно) | Повертає набір елементів, що дорівнює (якщо включно = істина) або менше, ніж задано елементу. | |
вище | E вище (E e) | Повертає найменший елемент у цьому наборі строго більше, ніж даний елемент, або нуль, якщо такого елемента немає. |
пусто | логічний isEmpty () | Перевіряє, чи є TreeSet порожнім. Повертає true, якщо порожнє. |
ітератор | Ітератор ітератора () | Повертає ітератор (за зростанням) для TreeSet. |
останній | E остання () | Повертає найвищий або останній елемент у TreeSet. |
нижній | E нижній (E e) | Повертає елемент (найбільший елемент), який суворо менше, ніж заданий елемент e у TreeSet. |
опитуванняПерше | E опитуванняПерший () | Видаляє та повертає перший (найнижчий) елемент у наборі; null, якщо набір порожній. |
опитуванняОстанній | E опитуванняОстанній () | Видаляє та повертає останній (найбільший) елемент у наборі; null, якщо встановлено порожнім. |
видалити | логічне видалення (Об'єкт o) | Видаляє даний елемент із набору. |
розмір | розмір int () | Повертає розмір або кількість елементів, наявних у TreeSet. |
піднабір | Підмножина NavigableSet (E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) | Повертає вигляд елементів, починаючи від Element до Element. |
SortedSet subSet (E fromElement, E toElement) | Повертає елементи подання в діапазоні відElement (включно) до toElement (ексклюзивно). | |
tailSet | SortedSet tailSet (E fromElement) | Повертає подання, що містить елементи, які більші або дорівнюють заданому fromElement. |
NavigableSet tailSet (E fromElement, логічно включно) | Повертає подання елементів, рівних (якщо інклюзив істинно) або більше, ніж відElement. |
Набір дерев у Java 8
Зверніть увагу, що для TreeSet у версії Java 8 немає значних змін. Усі методи та конструктори працюють у Java 8 та пізніших версіях.
Реалізація TreeSet в Java
Наступна програма Java реалізує більшість розглянутих вище методів TreeSet.
import java.util.Iterator; import java.util.TreeSet; import java.util.ArrayList; public class Main { public static void main(String() args) { //create a TreeSet of numbers TreeSet numSet = new TreeSet(); //add () method numSet.add(30); numSet.add(10); //declare and initialize an ArrayList ArrayList myList = new ArrayList(); myList.add(15); myList.add(25); myList.add(35); //addAll () method : add ArrayList elements to TreeSet numSet.addAll(myList); //define an iterator on TreeSet Iterator iterator = numSet.iterator(); System.out.print('Tree set contents: '); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //ceiling () System.out.println('ceiling(25):' + numSet.ceiling(25)); //floor () System.out.println('floor(25):' + numSet.floor(25)); //contains () System.out.println('TreeSet contains(15):' + numSet.contains(15)); // isEmpty () if (numSet.isEmpty()) System.out.print('Tree Set is empty.'); else System.out.println('Tree Set size: ' + numSet.size()); // first () System.out.println('TreeSet First element: ' + numSet.first()); // last () System.out.println('TreeSet Last element: ' + numSet.last()); // remove () if (numSet.remove(30)) System.out.println('Element 30 removed from TreeSet'); else System.out.println('Element 30 doesn't exist!'); System.out.print('TreeSet after remove (): '); iterator = numSet.iterator(); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); //size () System.out.println('TreeSet size after remove (): ' + numSet.size()); //Headset () System.out.println('Headset : ' + numSet.headSet(35)); // clear () numSet.clear(); System.out.println('Tree Set size after clear (): ' + numSet.size()); } }
Вихід:
Вміст дерева: 10 15 25 30 35
стеля (25): 25
поверх (25): 25
TreeSet містить (15): true
Розмір набору дерев: 5
TreeSet Перший елемент: 10
TreeSet Останній елемент: 35
Елемент 30 вилучено з TreeSet
TreeSet після видалення (): 10 15 25 35
Розмір TreeSet після видалення (): 4
Гарнітура: (10, 15, 25)
Дерево Розмір набору після очищення (): 0
У наведеній вище програмі ми визначаємо об’єкт TreeSet, а потім додаємо до нього елементи за допомогою методу ‘add’. Далі визначаємо ArrayList. Потім ми додаємо елементи ArrayList до TreeSet, використовуючи метод ‘addAll’. Пізніше ми продемонструємо різні методи TreeSet, такі як Iterator, стеля, підлога, перший, останній, містить, розмір, isEmpty тощо.
TreeSet проти HashSet
Давайте перевіримо деякі відмінності між TreeSet та HashSet.
TreeSet | HashSet |
---|---|
Елементи впорядковані відповідно до природного впорядкування. | Елементи не впорядковані. |
Забирає час O (журнал N) для таких операцій, як вставка, видалення та пошук, що робить це повільнішим, ніж TreeSet. | Потрібен постійний час для основних операцій, таких як вставка, видалення та пошук, що робить це швидше, ніж TreeSet. |
Не допускає нульових об’єктів. | Дозволяє нульовий об'єкт. |
Використовує метод compareTo () для порівняння двох об’єктів. | Використовує метод compare () та equals () для порівняння двох об’єктів. |
Внутрішньо реалізований за допомогою навігаційної карти дерев. | Внутрішньо реалізований за допомогою HashMap. |
Має багатий функціональний API, який може виконувати різні маніпуляції. | Функціональний API HashSet досить обмежений. |
Часті запитання
Q # 1) Що таке TreeSet?
Відповідь: TreeSet - це реалізація SortedSet, яка не допускає повторюваних значень. Елементи TreeSet за замовчуванням сортуються у порядку зростання.
Q # 2) Як додати елементи до TreeSet в Java?
Відповідь: Клас TreeSet надає метод add, який використовується для додавання певного елемента в TreeSet. Він також надає метод 'addAll'. Цей метод приймає будь-яку іншу колекцію як аргумент, а потім додає всі елементи цієї колекції до TreeSet.
Q # 3) Чи є TreeSet потокобезпечним?
Відповідь: Ні. TreeSet не захищений від потоків. Таким чином, ми повинні подбати про те, як ми працюємо з TreeSet у багатопотоковому середовищі.
Q # 4) Чи може TreeSet мати дублікати?
Відповідь: Ні. TreeSet не дозволяє дублікати.
Q # 5)Чи дозволяє TreeSet нуль у Java?
Відповідь: Так. У TreeSet ми можемо мати нульові елементи.
Висновок
На цьому наш підручник з TreeSet завершено. TreeSet - це реалізація SortedSet, яка не допускає дублікатів, але допускає нульові значення. Елементи в TreeSet за замовчуванням сортуються за природним упорядкуванням за зростанням.
Ми бачили основи класу TreeSet, а також його оголошення та різні конструктори та методи.
У наступних підручниках ми обговорюємо інші класи колекції Java.
=> Тут слідкуйте за простими навчальними серіями Java.
Рекомендована література
- Бінарне дерево пошуку на Java - приклади реалізації та коду
- TreeMap в Java - Підручник з прикладами Java TreeMap
- Що таке Java Java | Підручник з класу Java Vector з прикладами
- Підручник з класу сканера Java із прикладами
- Підручник з класу масивів Java - java.util.Arrays Class з прикладами
- Підручник JAVA для початківців: 100+ практичних відео-підручників Java
- Рядок Java містить () Підручник із методів із прикладами
- Нерівний масив у Java - Підручник із прикладами